UrsSetPoHandle 函数 (ursdevice.h)
使用电源管理框架(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