2009-07-27 11 views
3

ドライブ文字からデバイスインスタンスIDを取得するにはどうすればよいですか?デバイス名へのドライブ文字ID

私のプロセスは、デバイス到着メッセージで始まります。私は到着メッセージからドライブレターを取得し、DVDトレイを開くことに成功しています。

私はさまざまなセットアップAPIアイテムを検索しました。ドライブ・レターからデバイス・インスタンスIDに私を引き付けるものは何も見つかりませんでした。

C#またはVB.NETのソリューションが理想的ですが、私はAPI呼び出しを見る限り、他の言語からもそれを理解していきたいと思います。

ありがとうございます...

答えて

4

あなたは直接行うことはできません。

このリンクはSTORAGE_DEVICE_NUMBERを使用しています。あなたのデバイス名にIOCTL_STORAGE_GET_DEVICE_NUMBERのDeviceIoControlを使用して、この構造体を設定することができます。この値を一方の側に置きます。
次に、SetupDiGetClassDevsを使用してGUIDSを適切に設定して、あなたのシステムにデバイス情報を取得する必要があります。次に、SetupDiEnumDeviceInfoを使用してデバイスを列挙します。次に、SetupDiEnumDeviceInterfacesを使用してインターフェイスを列挙し、最後にSetupDiGetDeviceInterfaceDetailを使用して情報を取得します。返されたこの構造では、上記のようにSTORAGE_DEVICE_NUMBERを取得するために使用できるDevicePathを取得できます。これをドライブレターのSTORAGE_DEVICE_NUMBERと一致させると、ドライブレターが構造にリンクされました。ピー!この構造の内部にはDevInstがあります。

1

私は誰もが

を^^ために、私は同じ必要性を持っていたし、これは私がそれをやったかのメインラインである、それは今ではなく、あなたのために遅れることを知っている:

- あなたは、デバイスの到着を受信するウィンドウを必要としますあなたはDeviceNotificationFilterあなたがVM_DEVICECHANGE

を探して、あなたのウィンドウのメッセージループ内= DBT_DEVTYP_DEVICEINTERFACE

-Thenをdbcc_devicetypeするために開始除去(あなたが言ったように)

を作成-Then

-When uはそれがDBT_DEVTYPE_VOLUME(私は手紙と、ここで、ドライブの種類を得ていた)、またはDBT_DEVTYPE_DEVICEINTERFACEであればそこにあなたがあなたのwellcastedたlParamを使用することができます(チェックするためのlParamを使用し、wParamに== DBT_DEVICEARRIVAL場合は、それを受け取ります入力構造体からInstanceIdを取得します)。

ドライブを接続すると、最初にDEVINTERFACEを受け取り、次にもう一方を受け取ります。 私はこの長い時間前に行ったメインラインのみを提供しています。ここにコードはありません。また、ネット上でたくさんのコードを見つけました(長い時間前にもっと今あるはずです^^^ )おそらく、msdnはこれを行うための完全なコード例を提供します。

これを読んでさらに情報が必要な場合は、多くの人が必要とする場合は、返信したり、完全な文書化された回答をしてください。

あなたのご協力をお待ちしています。

関連する問題