DOBON.NET DOBON.NETプログラミング掲示板過去ログ

デバイスのコントロール

環境/言語:[VB.NET]
分類:[.NET]

リムーバブルメディアを取り外す処理を作成してみましたがエラーになります。
ご指導頂きたくお願いします。


<エラー内容>
'System.NullReferenceException' のハンドルされていない例外が
リムーバブルメディアを取り出す.exe で発生しました。

追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。


<エラー発生箇所>
ドライブをロックする。
(以下参照)


<vb.netソース>
' ボリュームをオープンする。
lngVolHandle = CreateFile("\\.\L:", _
GENERIC_READ Or GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, _
0, _
OPEN_EXISTING, _
0, _
0)
' 失敗した場合のエラー処理(省略)・・・成功しています
' ドライブをロックする。
lngResult = DeviceIoControl(lngVolHandle, _
FSCTL_LOCK_VOLUME, _
0, 0, _
0, 0, _
lngBytesReturned, _
0)
■No10995に返信(funchiさんの記事)
> リムーバブルメディアを取り外す処理を作成してみましたがエラーになります。
> ご指導頂きたくお願いします。

  昔、他のサイトで紹介したURL記載します。
  VB6ですが、参考までに。

  http://vbnet.mvps.org/index.html?code/disk/deviolock.htm

以上。
>   昔、他のサイトで紹介したURL記載します。
>   VB6ですが、参考までに。
>
>   http://vbnet.mvps.org/index.html?code/disk/deviolock.htm
>
ありがとうございます。参考にして何とか形になりました。
しかし、(以下コーディングは省略した形で記載します)
1.ボリュームをオープンする。CreateFile
2.ドライブをロックする。DeviceIoControl(FSCTL_LOCK_VOLUME)
3.ボリュームを取り外す。DeviceIoControl(FSCTL_DISMOUNT_VOLUME)
4.削除されることを確認。DeviceIoControl(IOCTL_STORAGE_MEDIA_REMOVAL)
5.メディアを取り出す。DeviceIoControl(IOCTL_STORAGE_EJECT_MEDIA)
6.ドライブをロック解除する。DeviceIoControl(FSCTL_UNLOCK_VOLUME)
7.ボリュームハンドルの開放。CloseHandle
の処理は一連で正常に終了しています。エクスプローラからはドライブの内容は表示されませんが、デジカメのUSBケーブルは未だ抜けない状態です。(ハードウェアの取り外し・停止が出来ていないようです)
どのような処理が、何に対しての処理が足りないのでしょうか?

※ リムーバブルメディアの取出しとはデジカメの取り外しの事です。同じものだと思っていたのでリムーバブルメディアと記載しました。

DOBON.NET | プログラミング道 | プログラミング掲示板