Share via


Fonction UrsSetPoHandle (ursdevice.h)

Inscrit et supprime l’inscription du pilote client auprès de l’infrastructure de gestion de l’alimentation (PoFx).

Syntaxe

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

Paramètres

[in] Device

Handle de l’objet de périphérique d’infrastructure que le pilote client a récupéré lors de l’appel précédent à WdfDeviceCreate.

[in] PoHandle

Handle qui représente l’inscription de l’appareil auprès de PoFx. Le pilote client reçoit ce handle de WDF dans les fonctions de rappel EvtDeviceWdmPostPoFxRegisterDevice et EvtDeviceWdmPrePoFxUnregisterDevice .

Valeur de retour

None

Remarques

Le pilote client du contrôleur à double rôle doit être le propriétaire de la stratégie d’alimentation. Le pilote peut recevoir des notifications de l’infrastructure de gestion de l’alimentation (PoFx). Pour ce faire, après avoir appelé UrsDeviceInitialize, le pilote doit inscrire des fonctions de rappel PoFx. Le pilote client inscrit directement l’appareil auprès de l’infrastructure d’alimentation ou obtient un POHANDLE auprès de WDF dans EvtDeviceWdmPostPoFxRegisterDevice. Une fois l’inscription réussie, le pilote fournit ce handle à l’extension de classe à double rôle USB.

Dans l’implémentation du pilote client de la fonction de rappel EvtDeviceWdmPostPoFxRegisterDevice , le pilote est censé appeler UrsSetPoHandle en passant le handle reçu. Sur certaines plateformes, l’extension de classe peut utiliser POHANDLE pour gérer le contrôleur sous tension. À l’inverse, avant que l’extension de classe supprime l’inscription auprès de Power Framework, elle appelle l’implémentation EvtDeviceWdmPrePoFxUnregisterDevice du pilote client. Le pilote est censé appeler UrsSetPoHandle en passant NULL comme valeur PoHandle.

Exemples



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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10
Serveur minimal pris en charge Windows Server 2016
Plateforme cible Windows
Version KMDF minimale 1.15
En-tête ursdevice.h (include Urscx.h)
Bibliothèque Urscxstub.lib
IRQL PASSIVE_LEVEL

Voir aussi

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice