Condividi tramite


Funzione UrsSetPoHandle (ursdevice.h)

Registra ed elimina la registrazione del driver client con il framework di risparmio energia (PoFx).

Sintassi

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

Parametri

[in] Device

Handle per l'oggetto dispositivo framework recuperato dal driver client nella chiamata precedente a WdfDeviceCreate.

[in] PoHandle

Handle che rappresenta la registrazione del dispositivo con PoFx. Il driver client riceve questo handle da WDF in EvtDeviceWdmPostPoFxRegisterDevice e EvtDeviceWdmPrePoFxUnregisterDevice callback.

Valore restituito

nessuno

Osservazioni

Il driver client per il controller a doppio ruolo deve essere il proprietario dei criteri di alimentazione. Il driver può ricevere notifiche dal framework di gestione energia (PoFx). A tale scopo, dopo aver chiamato UrsDeviceInitialize, il driver deve registrare le funzioni di callback di PoFx. Il driver client registra il dispositivo con il framework di alimentazione direttamente o ottiene un POHANDLE da WDF in EvtDeviceWdmPostPoFxRegisterDevice. Al termine della registrazione, il driver fornisce tale handle all'estensione della classe dual-role USB.

Nell'implementazione del driver client della funzione di callback evtDeviceWdmPostPoFxRegisterDevice , il driver deve chiamare UrsSetPoHandle passando l'handle ricevuto. In alcune piattaforme, l'estensione della classe potrebbe usare POHANDLE per gestire il controller. Al contrario, prima dell'estensione della classe elimina la registrazione con il framework di alimentazione, richiama l'implementazione evtDeviceWdmPrePoFxUnregisterDevice del driver client. Il driver dovrebbe chiamare UrsSetPoHandle passando NULL come valore PoHandle.

Esempio



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

Requisiti

Requisito Valore
Client minimo supportato Windows 10
Server minimo supportato Windows Server 2016
Piattaforma di destinazione Windows
Versione KMDF minima 1.15
Intestazione ursdevice.h (includere Urscx.h)
Libreria Urscxstub.lib
IRQL PASSIVE_LEVEL

Vedi anche

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice