ursSetPoHandle 函数 (ursdevice.h)

将客户端驱动程序注册到电源管理框架 (PoFx) 。

语法

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

参数

[in] Device

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

[in] PoHandle

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