向電源管理架構註冊並刪除用戶端驅動程序的註冊(PoFx)。
語法
void UrsSetPoHandle(
[in] WDFDEVICE Device,
[in] POHANDLE PoHandle
);
參數
[in] Device
用戶端驅動程式在先前 呼叫 WdfDeviceCreate中擷取之架構裝置物件的句柄。
[in] PoHandle
表示使用PoFx註冊裝置的句柄。 用戶端驅動程式會在 EvtDeviceWdmPostPoFxRegisterDevice 和 EvtDeviceWdmPrePoFxUnregisterDevice 回呼函式中從 WDF 接收此句柄。
傳回值
沒有
言論
雙角色控制器的用戶端驅動程式必須是電源原則擁有者。 驅動程式可以從電源管理架構 (PoFx) 接收通知。 若要這樣做,在呼叫 UrsDeviceInitialize之後,驅動程式必須註冊 PoFx 回呼函式。 用戶端驅動程式會直接向 Power Framework 註冊裝置,或在 EvtDeviceWdmPostPoFxRegisterDevice中從 WDF 取得 POHANDLE。 註冊成功之後,驅動程式會提供USB雙重角色類別延伸模組的句柄。
在用戶端驅動程序實作的 EvtDeviceWdmPostPoFxRegisterDevice 回呼函式中,驅動程式應該透過傳遞接收的句柄來呼叫 UrsSetPoHandle。 在某些平臺上,類別延伸模組可能會使用POHANDLE來電源管理控制器。 相反地,在類別延伸模組刪除Power Framework的註冊之前,它會叫用客戶端驅動程式的 EvtDeviceWdmPrePoFxUnregisterDevice 實作。 驅動程式應該藉由傳遞 NULL 做為 PoHandle 值,呼叫 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 |
目標平臺 | 窗戶 |
最低 KMDF 版本 | 1.15 |
標頭 | ursdevice.h (包括 Urscx.h) |
連結庫 | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |
另請參閱
EvtDeviceWdmPostPoFxRegisterDevice
EvtDeviceWdmPrePoFxUnregisterDevice