UrsSetPoHandle 函数 (ursdevice.h)

使用电源管理框架(PoFx)注册和删除客户端驱动程序的注册。

语法

void UrsSetPoHandle(
  [in] WDFDEVICE Device,
  [in] POHANDLE  PoHandle
);

参数

[in] Device

客户端驱动程序在上一次调用 WdfDeviceCreate中检索到的框架设备对象的句柄。

[in] PoHandle

表示使用 PoFx 注册设备的句柄。 客户端驱动程序从 EvtDeviceWdmPostPoFxRegisterDeviceEvtDeviceWdmPrePoFxUnregisterDevice 回调函数中的 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