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 对控制器进行电源管理。 相反,在类扩展删除向 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 |
目标平台 | Windows |
最低 KMDF 版本 | 1.15 |
标头 | ursdevice.h (包括 Urscx.h) |
Library | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |
另请参阅
EvtDeviceWdmPostPoFxRegisterDevice
EvtDeviceWdmPrePoFxUnregisterDevice