Win32 API 日本語リファレンス
ホーム › Devices.Enumeration.Pnp › SW_DEVICE_CREATE_CALLBACK

SW_DEVICE_CREATE_CALLBACK

コールバック

シグネチャ

void SW_DEVICE_CREATE_CALLBACK(
    HSWDEVICE hSwDevice,
    HRESULT CreateResult,
    void* pContext,
    LPWSTR pszDeviceInstanceId
);

パラメーター

フィールド型説明
hSwDeviceHSWDEVICEソフトウェアデバイスのハンドルです。
CreateResultHRESULTソフトウェアデバイスの列挙が成功したかどうかを示す HRESULT です。
pContextvoid*クライアントアプリが SwDeviceCreate に任意で指定したコンテキストです。
pszDeviceInstanceIdLPWSTRPnP がデバイスに割り当てたデバイスインスタンス ID です。

公式ドキュメント

レジストリ上に実体を持つデバイスを提供し、呼び出し元が hSwDevice ハンドルを使用してソフトウェアデバイス API の関数を呼び出せるようにします。

解説(Remarks)

オペレーティングシステムは、PnP がデバイスを列挙した後に SW_DEVICE_CREATE_CALLBACK コールバック関数を呼び出します。 このコールバック関数が呼び出された後、デバイスはレジストリ上に実体を持ち、hSwDevice ハンドルを使用してソフトウェアデバイス API の関数を呼び出せるようになります。 作成されたデバイスに対して、デバイスを扱う他の API を使用することもできます。

PnP によるデバイスの列挙は、デバイスが最初に受ける処理です。 PnP による列挙の後、デバイスはレジストリ上に実体を持つだけの状態であり、そのデバイスに対してプロパティを設定できます。 PnP がデバイスを列挙しただけでは、デバイスはまだ開始されておらず、そのデバイス用のドライバーもインターフェイスをまだ登録または有効化していません。 デバイスを使用したい場合、多くのケースではアプリがデバイスインターフェイスの到着を待つことをお勧めします。

メモ コールバック関数は、作成されたデバイスのデバイスインスタンス ID を提供します。ソフトウェアデバイス API の呼び出し元は、デバイスインスタンス ID を推測したり自分で組み立てたりせず、常にコールバック関数から提供される値を使用することをお勧めします。
コールバック関数は、任意のスレッドプールスレッド上で実行されます。 クライアントアプリは、コールバック関数内で必要なだけの処理を行えます。

Windows 8 では、コールバック関数内で SwDeviceClose を呼び出すことはできません。 呼び出すとデッドロックが発生します。 デストラクターの実行時に SwDeviceClose を呼び出す参照カウント付きオブジェクトを解放する場合は注意してください。 Windows 8.1 ではこの制限が解除され、コールバック関数内で SwDeviceClose を呼び出せます。

PnP がデバイスを列挙できたかどうかを確認するため、CreateResult に渡される HRESULT を必ずチェックしてください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)