前提条件として、Windows2012で、BackupOperatorsとPowerUsers、Usersグループに属するユーザーで、以下の32Bitプログラムを実行します。
32Bitプログラムは、DVD-RAMに対して、一般的な関数CreateFileを使い、ファイルを生成して、データを書き込み、最後に閉じます。次に、メディアをイジェクトを実行しますが、イジェクトしません。ちなみに、DVD-RAMへのアクセスランプが消えるまで待って、イジェクト処理を実行させると、イジェクトします。ファイルへの書き込みが、遅延されているのかと思い、FILE_FLAG_WRITE_THROUGHをCreateFileでし指定しましたが、結果は変わりません。
なお、管理者モードで実行すれば、イジェクトします。どなたか、回避策をご存知でしたら教えてください。お願いします。
このプログラムは、Windows8では正常に動作してメディアがイジェクトされます。また、UACオフしたWindows7、2008Serverでも動作します。
イジェクトには、以下の関数を使っています(MS社のサンプルコードを参考にしてます)
DeviceIoControl( hVolume,
IOCTL_STORAGE_EJECT_MEDIA,
NULL, 0,
NULL, 0,
&dwBytesReturned,
NULL);