DeviceIoControlのIOCTL_STORAGE_CHECK_VERIFY(リムーバブルデバイスのメディア変更
の有無をチェックします。)について質問があります。
上記のAPIでメディア変更の有無情報を取得したいのですが、うまくいきません。
設定としては
hDisk = CreateFile(szVolumeName, GENERIC_READ, FILE_SHARE_WRITE,
NULL,OPEN_EXISTING,0,NULL);
fResult = DeviceIoControl( hDisk,
IOCTL_STORAGE_CHECK_VERIFY,
NULL,
0,
NULL,
0,
&ReturnedByteCount,
0);
とした結果、
抜→差:ReturnedByteCountは0, fResultは1
差のまま:ReturnedByteCountは0, fResultは1
差→抜:ReturnedByteCountは0xcccccccc, fResultは0
抜のまま:ReturnedByteCountは0xcccccccc, fResultは0
となります。
あとどのタイミングでこのAPIは抜→差から差のままと判断するのか分かりません。
ご存知の方、ご教授ください。
環境:WinXP, VC++6.0, MFC, SDKプラットホーム
IOCTL_STORAGE_CHECK_VERIFY では、
メディアが交換されたか否かは、チェックできないと
思います。
fResult が1なら、メディアが挿入されている。
0なら挿入されていないか、その他のエラーが
発生してDeviceIoControl()が失敗していると
いうことになります。
ちなみに、DeviceIoControl()が失敗すると、
ReturnedByteCount には何も入りませんので
ララ さんは、Debug モードでコンパイルされていると
思いますが、Debug モード時の変数の初期値である
0xcccccccc がそのまま表示されているだけです。
通常DeviceIoControl()が、何かの情報を返す場合は、
5番目の引数で渡されたアドレスに返すことになりますが、
IOCTL_STORAGE_CHECK_VERIFY では、NULL を指定することに
なっていますので、戻り値による DeviceIoControl() の成功、失敗
しか得られる情報はありません。