DeviceIoControlのIOCTL_STORAGE_CHECK_VERIFYについて – プログラミング – Home

通知
すべてクリア

DeviceIoControlのIOCTL_STORAGE_CHECK_VERIFYについて


ララ
 ララ
(@ララ)
ゲスト
結合: 23年前
投稿: 93
Topic starter  

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
 yas0302
(@yas0302)
ゲスト
結合: 23年前
投稿: 37
 

IOCTL_STORAGE_CHECK_VERIFY では、
メディアが交換されたか否かは、チェックできないと
思います。

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました