DeviceIoControlのIOCTL_STORAGE_CHECK_VERIFYについて

[戻る]
ララ 2002/07/23(火) 13:50:32
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プラットホーム

yas0302 2002/07/23(火) 23:20:15
IOCTL_STORAGE_CHECK_VERIFY では、
メディアが交換されたか否かは、チェックできないと
思います。

fResult が1なら、メディアが挿入されている。
0なら挿入されていないか、その他のエラーが
発生してDeviceIoControl()が失敗していると
いうことになります。

ちなみに、DeviceIoControl()が失敗すると、
ReturnedByteCount には何も入りませんので
ララ さんは、Debug モードでコンパイルされていると
思いますが、Debug モード時の変数の初期値である
0xcccccccc がそのまま表示されているだけです。

通常DeviceIoControl()が、何かの情報を返す場合は、
5番目の引数で渡されたアドレスに返すことになりますが、
IOCTL_STORAGE_CHECK_VERIFY では、NULL を指定することに
なっていますので、戻り値による DeviceIoControl() の成功、失敗
しか得られる情報はありません。

古いスレッドには追加発言できません。