C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: ドライブを指定してUSBメモリを取り外したい


(過去ログ 119 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■70190 / inTopicNo.1)  ドライブを指定してUSBメモリを取り外したい
  
□投稿者/ し〜 (1回)-(2014/02/27(Thu) 20:48:56)

分類:[VB.NET/VB2005 以降] 

OS:WindowsXP
開発環境:VB.NET 2005

複数のUSBメモリがマシンに挿されている場合に、
そこから特定のドライブ(例えばF:)を指定してUSBメモリを取り外すにはどうすればよいでしょうか?

最終的には setupapi.dll にある CM_Request_Device_Eject を画面表示なしでコールして
取り外さないといけないという指定があり、
CM_Request_Device_Eject を使用する前に複数のAPIを使わないと
引数として渡すインスタンスIDが取得できないようだというのはわかりましたが、
具体的にどうすればいいのかがわかりません。
そこに至るまでのAPIや処理の順番を可能であればサンプルソースのような形で
ご教示いただけないでしょうか。

C#のサンプルは見つかるのですが、
C#には疎い上にソースのコンバートサイトを使用してもコンバートができなかったり、
サンプルソース上で使用されている定数の具体的な値がわからないので使えない
といったものが大半で行き詰っています。

よろしくお願い致します。
引用返信 編集キー/
■70191 / inTopicNo.2)  Re[1]: ドライブを指定してUSBメモリを取り外したい
□投稿者/ 魔界の仮面弁士 (550回)-(2014/02/27(Thu) 21:03:50)
No70190 (し〜 さん) に返信
> そこから特定のドライブ(例えばF:)を指定してUSBメモリを取り外すにはどうすればよいでしょうか?

下記が参考になるかもしれません。
http://dobon.net/vb/bbs/log3-45/27263.html
引用返信 編集キー/
■70201 / inTopicNo.3)  Re[2]: ドライブを指定してUSBメモリを取り外したい
□投稿者/ し〜 (2回)-(2014/02/28(Fri) 13:29:18)
No70191 (魔界の仮面弁士 さん) に返信
> 下記が参考になるかもしれません。
> http://dobon.net/vb/bbs/log3-45/27263.html

ご返答ありがとうございます。
デバイスIDの取得をして取り外しを実行するというところで使えるので助かりました。

ただ、USBなら全部外すというのであれば教えていただいたサイトの内容を少し変更すればよかったのですが、
ドライブの指定⇒デバイスID取得⇒取り外しとしないといけない中で、
デバイスIDとドライブレターを結び付ける方法が依然問題として残っています。
Win32_DiskDrive で値を取得してもドライブレターは返してもらえないようでして。。。

引き続き、デバイスIDとドライブレターを結び付ける方法をわかる方がいらっしゃれば
ご教示いただけますでしょうか。

よろしくお願いします。
引用返信 編集キー/
■70202 / inTopicNo.4)  Re[3]: ドライブを指定してUSBメモリを取り外したい
□投稿者/ Hongliang (177回)-(2014/02/28(Fri) 14:19:51)
WMIでやるなら、Win32_LogicalDisk -> Win32_DiskPartition -> Win32_DiskDriveでしょうかね。

ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='X:'} WHERE ResultClass=Win32_DiskPartition
ASSOCIATORS OF {Win32_DiskPartition.DeviceID='Disk #X, Partition #X'} WHERE ResultClass=Win32_DiskDrive

参考ページのURL張ったら怒られたので「"ASSOCIATORS OF" on System.Management」で検索してみて下さい。

引用返信 編集キー/
■70203 / inTopicNo.5)  Re[3]: ドライブを指定してUSBメモリを取り外したい
□投稿者/ 魔界の仮面弁士 (551回)-(2014/02/28(Fri) 14:28:59)
No70201 (し〜 さん) に返信
> Win32_DiskDrive で値を取得してもドライブレターは返してもらえないようでして。。。

物理デバイスと論理デバイスは別だからです。
ひとつの USB デバイスが、複数の論理ドライブを持つこともありますよね。

ドライブレターが必要な場合は、Win32_LogicalDisk / CIM_LogicalDisk 等を利用してみてください。



> 引き続き、デバイスIDとドライブレターを結び付ける方法をわかる方がいらっしゃれば
既に実験されているように、Win32_DiskDrive からは DeviceID と PNPDeviceID を得られますよね。

そして『Win32_DiskDriveToDiskPartition クラス』を使えば、
ドライブ(Win32_DiskDrive) とパーティション(Win32_DiskPartition)が繋がります。
http://msdn.microsoft.com/en-us/library/aa394134.aspx

そして、その Win32_DiskPartition から、さらにドライブレターへと繋ぐには、
『Win32_LogicalDiskToPartition クラス』を通じて、Win32_LogicalDisk クラスを
取得すれば OK です。
http://msdn.microsoft.com/en-us/library/aa394175.aspx


これらを使ったコードのサンプルが下記にあります。
http://gallery.technet.microsoft.com/scriptcenter/1abfce9f-d531-440e-9500-b9d7d2e454df

.NET での System.Management 名前空間のコードではなく、
VBScript による COM 版のコードなので、そのまま使えるわけで
ありませんが、手順の参考にはなるかと。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -