Compartir a través de


Función UrsSetPoHandle (ursdevice.h)

Registra y elimina el registro del controlador cliente con el marco de administración de energía (PoFx).

Sintaxis

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

Parámetros

[in] Device

Identificador del objeto de dispositivo de marco que el controlador cliente recuperó en la llamada anterior a WdfDeviceCreate.

[in] PoHandle

Identificador que representa el registro del dispositivo con PoFx. El controlador cliente recibe este identificador de WDF en EvtDeviceWdmPostPoFxRegisterDevice y EvtDeviceWdmPrePoFxUnregisterDevice funciones de devolución de llamada.

Valor devuelto

Ninguno

Observaciones

El controlador cliente para el controlador de doble rol debe ser el propietario de la directiva de energía. El controlador puede recibir notificaciones del marco de administración de energía (PoFx). Para ello, después de llamar a UrsDeviceInitialize, el controlador debe registrar las funciones de devolución de llamada de PoFx. El controlador cliente registra el dispositivo directamente con power Framework o obtiene un POHANDLE de WDF en EvtDeviceWdmPostPoFxRegisterDevice. Una vez que el registro se realiza correctamente, el controlador proporciona ese identificador a la extensión de clase de doble rol USB.

En la implementación del controlador cliente de la EvtDeviceWdmPostPoFxRegisterDevice función de devolución de llamada, se espera que el controlador llame a UrsSetPoHandle pasando el identificador recibido. En algunas plataformas, la extensión de clase podría usar poHANDLE para administrar el controlador. Por el contrario, antes de que la extensión de clase elimine el registro con power Framework, invoca la implementación del controlador de cliente EvtDeviceWdmPrePoFxUnregisterDevice. Se espera que el controlador llame a UrsSetPoHandle pasando NULL como valor PoHandle.

Ejemplos



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);
}

Requisitos

Requisito Valor
cliente mínimo admitido Windows 10
servidor mínimo admitido Windows Server 2016
de la plataforma de destino de Windows
versión mínima de KMDF 1.15
encabezado de ursdevice.h (incluya Urscx.h)
biblioteca de Urscxstub.lib
irQL PASSIVE_LEVEL

Consulte también

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice