IHWEventHandler2
COM公式ドキュメント
IHWEventHandler インターフェースを拡張し、デバイスハンドラーにおけるユーザーアカウント制御 (UAC) の昇格に対応します。
解説(Remarks)
このインターフェースは、継承元である IHWEventHandler インターフェースのメソッドも提供します。
このインターフェースを実装するハンドラーは、IHWEventHandler::HandleEvent および IHWEventHandler2::HandleEventWithHWND の呼び出しから速やかに復帰し、自動再生ダイアログが閉じるのを妨げないようにしてください。また、このハンドラーの作成のためにローカルサーバーの起動が必要な場合は、CreateInstance 呼び出しをブロックせず、できるだけ早く復帰する必要があります。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
アプリケーションが処理するように登録されていないコンテンツタイプを含む自動再生デバイスイベントを処理します。このメソッドは所有者ウィンドウへのハンドルを提供するため、プロセスが昇格された特権を必要とする場合に UI を表示できます。
| pszDeviceID | LPWSTR | in | デバイス ID を格納する文字列バッファーへのポインター。 |
| pszAltDeviceID | LPWSTR | in | 代替デバイス ID を格納する文字列バッファーへのポインター。代替デバイス ID は、プライマリデバイス ID よりも人間が読みやすい形式です。 |
| pszEventType | LPWSTR | in | イベントタイプを格納する文字列バッファーへのポインター。イベントタイプには、DeviceArrival、DeviceRemoval、MediaArrival、MediaRemoval があります。 |
| hwndOwner | HWND | in | 表示された自動再生ダイアログへのハンドル。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ハンドラーが呼び出され、新しいプロセスで即座に特権の昇格を必要とする場合、同意 UI を表示するためにアクティブな親ウィンドウハンドルが必要になります。IHWEventHandler::HandleEvent ではハンドルを提供できないため、タスクバーが点滅するだけになります。IHWEventHandler2::HandleEventWithHWND は HWND を提供し、UI を表示できるようにします。
ハンドラーがユーザーの直接的な操作ではなく既定として起動された場合、HWND はアクティブではなく、ダイアログは前面に表示されないことに注意してください。
イベントタイプは C/C++ 言語の定数ではなく、リテラルのテキスト文字列です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IHWEventHandler2 "{CFCC809F-295D-42E8-9FFC-424B33C487E6}"
#usecom global IHWEventHandler2 IID_IHWEventHandler2 "{}"
#comfunc global IHWEventHandler2_HandleEventWithHWND 6 wstr,wstr,wstr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。