Partager via


Fonction UrsSetPoHandle (ursdevice.h)

Inscrit et supprime l’inscription du pilote client avec 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 d’appareil framework 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 avec PoFx. Le pilote client reçoit ce handle de WDF dans EvtDeviceWdmPostPoFxRegisterDevice et EvtDeviceWdmPrePoFxUnregisterDevice fonctions de rappel.

Valeur de retour

Aucun

Remarques

Le pilote client pour le 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 les fonctions de rappel PoFx. Le pilote client inscrit l’appareil auprès de l’infrastructure d’alimentation directement ou obtient un POHANDLE auprès de WDF dans EvtDeviceWdmPostPoFxRegisterDevice. Une fois l’inscription réussie, le pilote fournit cette poignée à 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. À l’inverse, avant que l’extension de classe supprime l’inscription avec l’infrastructure d’alimentation, 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);
}

Exigences

Exigence Valeur
client minimum pris en charge Windows 10
serveur minimum pris en charge Windows Server 2016
plateforme cible Windows
version minimale de KMDF 1.15
d’en-tête ursdevice.h (include Urscx.h)
bibliothèque Urscxstub.lib
IRQL PASSIVE_LEVEL

Voir aussi

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice