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