Freigeben über


UrsSetPoHandle-Funktion (ursdevice.h)

Registriert und löscht die Registrierung des Clienttreibers mit dem 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 WdfDeviceCreateabgerufen hat.

[in] PoHandle

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

Rückgabewert

Nichts

Bemerkungen

Der Clienttreiber für den Dual-Role-Controller muss der Besitzer der Energierichtlinie sein. Der Treiber kann Benachrichtigungen vom Power Management Framework (PoFx) empfangen. Dazu muss der Treiber nach dem Aufrufen UrsDeviceInitializePoFx-Rückruffunktionen registrieren. Der Clienttreiber registriert das Gerät direkt mit dem Power Framework oder ruft einen POHANDLE aus WDF in EvtDeviceWdmPostPoFxRegisterDevice. Nachdem die Registrierung erfolgreich war, stellt der Treiber dieses Handle für die USB-Erweiterung der Dual-Role-Klasse bereit.

In der Clienttreiberimplementierung der EvtDeviceWdmPostPoFxRegisterDevice Rückruffunktion wird erwartet, dass der Treiber UrsSetPoHandle- aufrufen wird, indem das empfangene Handle übergeben wird. Auf einigen Plattformen kann die Klassenerweiterung den POHANDLE verwenden, um den Controller zu verwalten. Umgekehrt ruft sie vor dem Löschen der Registrierung mit dem Power Framework die EvtDeviceWdmPrePoFxUnregisterDevice Implementierung des Clienttreibers auf. Der Treiber wird erwartet, dass UrsSetPoHandle- aufgerufen wird, indem NULL als PoHandle-Wert übergeben wird.

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
mindestens unterstützte Client- Windows 10
mindestens unterstützte Server- Windows Server 2016
Zielplattform- Fenster
Minimale KMDF-Version 1.15
Header- ursdevice.h (include Urscx.h)
Library Urscxstub.lib
IRQL- PASSIVE_LEVEL

Siehe auch

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice