SW_DEVICE_CREATE_CALLBACK
コールバックシグネチャ
void SW_DEVICE_CREATE_CALLBACK(
HSWDEVICE hSwDevice,
HRESULT CreateResult,
void* pContext,
LPWSTR pszDeviceInstanceId
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| hSwDevice | HSWDEVICE | ソフトウェアデバイスのハンドルです。 |
| CreateResult | HRESULT | ソフトウェアデバイスの列挙が成功したかどうかを示す HRESULT です。 |
| pContext | void* | クライアントアプリが SwDeviceCreate に任意で指定したコンテキストです。 |
| pszDeviceInstanceId | LPWSTR | PnP がデバイスに割り当てたデバイスインスタンス ID です。 |
公式ドキュメント
レジストリ上に実体を持つデバイスを提供し、呼び出し元が hSwDevice ハンドルを使用してソフトウェアデバイス API の関数を呼び出せるようにします。
解説(Remarks)
オペレーティングシステムは、PnP がデバイスを列挙した後に SW_DEVICE_CREATE_CALLBACK コールバック関数を呼び出します。 このコールバック関数が呼び出された後、デバイスはレジストリ上に実体を持ち、hSwDevice ハンドルを使用してソフトウェアデバイス API の関数を呼び出せるようになります。 作成されたデバイスに対して、デバイスを扱う他の API を使用することもできます。
PnP によるデバイスの列挙は、デバイスが最初に受ける処理です。 PnP による列挙の後、デバイスはレジストリ上に実体を持つだけの状態であり、そのデバイスに対してプロパティを設定できます。 PnP がデバイスを列挙しただけでは、デバイスはまだ開始されておらず、そのデバイス用のドライバーもインターフェイスをまだ登録または有効化していません。 デバイスを使用したい場合、多くのケースではアプリがデバイスインターフェイスの到着を待つことをお勧めします。
Windows 8 では、コールバック関数内で SwDeviceClose を呼び出すことはできません。 呼び出すとデッドロックが発生します。 デストラクターの実行時に SwDeviceClose を呼び出す参照カウント付きオブジェクトを解放する場合は注意してください。 Windows 8.1 ではこの制限が解除され、コールバック関数内で SwDeviceClose を呼び出せます。
PnP がデバイスを列挙できたかどうかを確認するため、CreateResult に渡される HRESULT を必ずチェックしてください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)