Функция UrsSetPoHandle (ursdevice.h)

Регистрирует и удаляет регистрацию драйвера клиента с помощью платформы управления питанием (PoFx).

Синтаксис

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

Параметры

[in] Device

Дескриптор объекта устройства платформы, полученный драйвером клиента при предыдущем вызове WdfDeviceCreate.

[in] PoHandle

Дескриптор, представляющий регистрацию устройства с помощью PoFx. Драйвер клиента получает этот дескриптор из WDF в функциях обратного вызова EvtDeviceWdmPostPoFxRegisterDevice и EvtDeviceWdmPrePoFxUnregisterDevice .

Возвращаемое значение

None

Remarks

Драйвер клиента для контроллера с двойной ролью должен быть владельцем политики питания. Драйвер может получать уведомления от платформы управления питанием (PoFx). Для этого после вызова UrsDeviceInitialize драйвер должен зарегистрировать функции обратного вызова PoFx. Драйвер клиента регистрирует устройство непосредственно в power framework или получает POHANDLE из WDF в EvtDeviceWdmPostPoFxRegisterDevice. После успешной регистрации драйвер предоставляет такую дескрипторную обработку для расширения класса с двумя ролами USB.

В реализации драйвером клиента функции обратного вызова EvtDeviceWdmPostPoFxRegisterDevice драйвер должен вызвать UrsSetPoHandle , передав полученный дескриптор. На некоторых платформах расширение класса может использовать POHANDLE для управления питанием контроллера. И наоборот, прежде чем расширение класса удаляет регистрацию в power framework, оно вызывает реализацию EvtDeviceWdmPrePoFxUnregisterDevice драйвера клиента. Ожидается, что драйвер вызовет UrsSetPoHandle , передав значение NULL в качестве значения PoHandle.

Примеры



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)
Библиотека Urscxstub.lib
IRQL PASSIVE_LEVEL

См. также раздел

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice