UrsSetPoHandle 関数 (ursdevice.h)
電源管理フレームワーク (PoFx) を使用して、クライアント ドライバーの登録を登録および削除します。
構文
void UrsSetPoHandle(
[in] WDFDEVICE Device,
[in] POHANDLE PoHandle
);
パラメーター
[in] Device
WdfDeviceCreate の前回の呼び出しでクライアント ドライバーが取得したフレームワーク デバイス オブジェクトへのハンドル。
[in] PoHandle
PoFx を使用したデバイスの登録を表すハンドル。 クライアント ドライバーは、 EvtDeviceWdmPostPoFxRegisterDevice および EvtDeviceWdmPrePoFxUnregisterDevice コールバック関数の WDF からこのハンドルを受け取ります。
戻り値
なし
解説
デュアルロール コントローラーのクライアント ドライバーは、電源ポリシー所有者である必要があります。 ドライバーは、電源管理フレームワーク (PoFx) から通知を受け取ることができます。 これを行うには、 UrsDeviceInitialize を呼び出した後、ドライバーは PoFx コールバック関数を登録する必要があります。 クライアント ドライバーは、デバイスを電源フレームワークに直接登録するか、 EvtDeviceWdmPostPoFxRegisterDevice の WDF から POHANDLE を取得します。 登録が成功すると、ドライバーは USB デュアルロール クラス拡張機能へのハンドルを提供します。
EvtDeviceWdmPostPoFxRegisterDevice コールバック関数のクライアント ドライバーの実装では、ドライバーは、受信したハンドルを渡すことによって UrsSetPoHandle を呼び出すことが期待されます。 一部のプラットフォームでは、クラス拡張機能で POHANDLE を使用してコントローラーの電源管理を行う場合があります。 逆に、クラス拡張機能が電源フレームワークへの登録を削除する前に、クライアント ドライバーの EvtDeviceWdmPrePoFxUnregisterDevice 実装を 呼び出します。 ドライバーは、PoHandle 値として NULL を渡すことによって UrsSetPoHandle を呼び出すことが想定されています。
例
EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE EvtDevicePostPoFxRegister;
EVT_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE EvtDevicePrePoFxUnregister;
EvtDriverDeviceAdd (
_In_ WDFDRIVER Driver,
_Inout_ PWDFDEVICE_INIT DeviceInit
)
{
...
WDFDEVICE device;
NTSTATUS status;
...
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS idleSettings;
WDF_POWER_FRAMEWORK_SETTINGS poFxSettings;
...
TRY {
WDF_POWER_FRAMEWORK_SETTINGS_INIT(&poFxSettings);
poFxSettings.EvtDeviceWdmPostPoFxRegisterDevice = EvtDevicePostPoFxRegister;
poFxSettings.EvtDeviceWdmPrePoFxUnregisterDevice = EvtDevicePrePoFxUnregister;
status = WdfDeviceWdmAssignPowerFrameworkSettings(device, &poFxSettings);
if (!NT_SUCCESS(status)) {
// WdfDeviceWdmAssignPowerFrameworkSettings failed.
}
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(&idleSettings, IdleCannotWakeFromS0);
idleSettings.IdleTimeoutType = SystemManagedIdleTimeout;
status = WdfDeviceAssignS0IdleSettings(device, &idleSettings);
if (!NT_SUCCESS(status)) {
// WdfDeviceAssignS0IdleSettings failed.
}
} FINALLY {
}
..
}
NTSTATUS
EvtDevicePostPoFxRegister (
_In_ WDFDEVICE Device,
_In_ POHANDLE PoHandle
)
{
UrsSetPoHandle(Device, PoHandle);
return STATUS_SUCCESS;
}
VOID
EvtDevicePrePoFxUnregister (
_In_ WDFDEVICE Device,
_In_ POHANDLE PoHandle
)
{
UNREFERENCED_PARAMETER(PoHandle);
UrsSetPoHandle(Device, NULL);
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10 |
サポートされている最小のサーバー | Windows Server 2016 |
対象プラットフォーム | Windows |
最小 KMDF バージョン | 1.15 |
Header | ursdevice.h (Urscx.h を含む) |
Library | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |
こちらもご覧ください
EvtDeviceWdmPostPoFxRegisterDevice
EvtDeviceWdmPrePoFxUnregisterDevice