Freigeben über


UrsSetPoHandle-Funktion (ursdevice.h)

Registriert und löscht die Registrierung des Clienttreibers beim Power Management Framework (PoFx).

Syntax

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

Parameter

[in] Device

Ein Handle für das Framework-Geräteobjekt, das der Clienttreiber im vorherigen Aufruf von WdfDeviceCreate abgerufen hat.

[in] PoHandle

Ein Handle, das die Registrierung des Geräts bei PoFx darstellt. Der Clienttreiber empfängt dieses Handle von WDF in den Rückruffunktionen EvtDeviceWdmPostPoFxRegisterDevice und EvtDeviceWdmPrePoFxUnregisterDevice .

Rückgabewert

Keine

Bemerkungen

Der Clienttreiber für den Controller mit zwei Rollen muss der Besitzer der Energierichtlinie sein. Der Treiber kann Benachrichtigungen vom Power Management Framework (PoFx) empfangen. Dazu muss der Treiber nach dem Aufruf von UrsDeviceInitialize PoFx-Rückruffunktionen registrieren. Der Clienttreiber registriert das Gerät direkt beim Energieframework oder ruft ein POHANDLE von WDF in EvtDeviceWdmPostPoFxRegisterDevice ab. Nach erfolgreicher Registrierung stellt der Treiber dieses Handle für die USB-Doppelrollenklassenerweiterung bereit.

In der Implementierung der Rückruffunktion EvtDeviceWdmPostPoFxRegisterDevice durch den Clienttreiber wird erwartet, dass der Treiber UrsSetPoHandle aufruft, indem er das empfangene Handle übergibt. Auf einigen Plattformen kann die Klassenerweiterung den POHANDLE verwenden, um den Controller mit Energie zu verwalten. Im Gegensatz dazu ruft die Klassenerweiterung vor dem Löschen der Registrierung mit dem Power Framework die EvtDeviceWdmPrePoFxUnregisterDevice-Implementierung des Clienttreibers auf. Es wird erwartet, dass der Treiber UrsSetPoHandle aufruft , indem er NULL als PoHandle-Wert übergibt.

Beispiele



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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10
Unterstützte Mindestversion (Server) Windows Server 2016
Zielplattform Windows
KMDF-Mindestversion 1.15
Kopfzeile ursdevice.h (include Urscx.h)
Bibliothek Urscxstub.lib
IRQL PASSIVE_LEVEL

Weitere Informationen

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice