IPNPXDeviceAssociation
COM公式ドキュメント
PnP-X デバイスの関連付けデータベース エントリを管理するメソッドを定義します。これらのメソッドは、対応する PnP devnode が変化したときに通知を送信します。
解説(Remarks)
このインターフェイスは、Function Discovery クエリが返した関数インスタンスに対して QueryService を呼び出すことで取得します。次の擬似コードは、QueryService 呼び出しで使用するパラメーターを示しています。
QueryService( SID_PNPXAssociation, __uuidof( IPNPXDeviceAssociation ) )
IPNPXDeviceAssociation のメソッドは、QueryService が呼び出された関数インスタンスの関連付けデータベース エントリを変更します。
すべての関数インスタンスを IPNPXDeviceAssociation のメソッドで関連付けできるわけではありません。関数インスタンスは、デバイスの検出に使用された Function Discovery プロバイダーが提供する UUID が PKEY_PNPX_GlobalIdentity キーに設定されている必要があります。プロパティ キーの詳細については、PnP-X Provider PKEYs を参照してください。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
関連付けデータベース エントリを関連付け済みとしてマークし、適切な通知を送信します。
| pszSubCategory | LPWSTR | inoptional | エントリが格納される関連付けデータベースのサブカテゴリ。このパラメーターは NULL にすることができます。 |
| pIFunctionDiscoveryNotification | IFunctionDiscoveryNotification* | inoptional | Function Discovery に通知先として登録されている IFunctionDiscoveryNotification オブジェクト。 |
戻り値
解説(Remarks)
このメソッドは、IPNPXDeviceAssociation インターフェイスの取得元となった関数インスタンスに対応する関連付けデータベース エントリを変更します。
デバイスが関連付けられると、PnP-X Service IP Bus Enumerator (IPBusEnum) が PnP コンポーネントにデバイスの devnode を作成する要求を送信します。devnode が作成されると、適切な通知が送信されます。通知に使用されるコールバック メソッドは、次のロジックに基づいて決定されます。
- デバイスの関連付け後に PnP 通知を受信した場合は、IFunctionDiscoveryNotification::OnUpdate メソッドが enumQueryUpdateAction パラメーターに QUA_ADD を設定して呼び出されます。
- デバイスの関連付け後に PnP 通知を受信せず、保留中の PnP イベントもない場合は、IFunctionDiscoveryNotification::OnError メソッドが呼び出されます。
- 最後に、デバイスの関連付け後に PnP 通知を受信せず、保留中の PnP イベントがある場合は、コールバック メソッドは呼び出されません。
関連付けデータベース エントリを関連付け解除済みとしてマークし、適切な通知を送信します。
| pszSubCategory | LPWSTR | inoptional | エントリが格納される関連付けデータベースのサブカテゴリ。このパラメーターは NULL にすることができます。 |
| pIFunctionDiscoveryNotification | IFunctionDiscoveryNotification* | inoptional | Function Discovery に通知先として登録されている IFunctionDiscoveryNotification オブジェクト。 |
戻り値
解説(Remarks)
このメソッドは、IPNPXDeviceAssociation インターフェイスの取得元となった関数インスタンスに対応する関連付けデータベース エントリを変更します。
通知に使用されるコールバック メソッドは、次のロジックに基づいて決定されます。
- デバイスの関連付け解除後に PnP 通知を受信した場合は、IFunctionDiscoveryNotification::OnUpdate メソッドが enumQueryUpdateAction パラメーターに QUA_REMOVE を設定して呼び出されます。
- デバイスの関連付け解除後に PnP 通知を受信せず、保留中の PnP イベントもない場合は、IFunctionDiscoveryNotification::OnError メソッドが呼び出されます。
- 最後に、デバイスの関連付け解除後に PnP 通知を受信せず、保留中の PnP イベントがある場合は、コールバック メソッドは呼び出されません。
関連付けデータベースからエントリを削除し、適切な通知を送信します。
| pszSubcategory | LPWSTR | inoptional | エントリが格納される関連付けデータベースのサブカテゴリ。このパラメーターは NULL にすることができます。 |
| pIFunctionDiscoveryNotification | IFunctionDiscoveryNotification* | inoptional | Function Discovery に通知先として登録されている IFunctionDiscoveryNotification オブジェクト。 |
戻り値
解説(Remarks)
このメソッドは、IPNPXDeviceAssociation インターフェイスの取得元となった関数インスタンスに対応する関連付けデータベース エントリを変更します。
通知に使用されるコールバック メソッドは、次のロジックに基づいて決定されます。
- デバイスの削除後に PnP 通知を受信した場合は、IFunctionDiscoveryNotification::OnUpdate メソッドが enumQueryUpdateAction パラメーターに QUA_REMOVE を設定して呼び出されます。
- デバイスの削除後に PnP 通知を受信せず、保留中の PnP イベントもない場合は、IFunctionDiscoveryNotification::OnError メソッドが呼び出されます。
- 最後に、デバイスの削除後に PnP 通知を受信せず、保留中の PnP イベントがある場合は、コールバック メソッドは呼び出されません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPNPXDeviceAssociation "{EED366D0-35B8-4FC5-8D20-7E5BD31F6DED}"
#usecom global IPNPXDeviceAssociation IID_IPNPXDeviceAssociation "{}"
#comfunc global IPNPXDeviceAssociation_Associate 3 wstr,sptr
#comfunc global IPNPXDeviceAssociation_Unassociate 4 wstr,sptr
#comfunc global IPNPXDeviceAssociation_Delete 5 wstr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。