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 de 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 las funciones de devolución de llamada EvtDeviceWdmPostPoFxRegisterDevice y EvtDeviceWdmPrePoFxUnregisterDevice .

Valor devuelto

None

Observaciones

El controlador de 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 función de devolución de llamada EvtDeviceWdmPostPoFxRegisterDevice , 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 evtDeviceWdmPrePoFxUnregisterDevice del controlador cliente. 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 Value
Cliente mínimo compatible Windows 10
Servidor mínimo compatible Windows Server 2016
Plataforma de destino Windows
Versión mínima de KMDF 1.15
Encabezado ursdevice.h (incluya Urscx.h)
Library Urscxstub.lib
IRQL PASSIVE_LEVEL

Consulte también

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice