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 funzioni di 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 risparmio energia (PoFx). A tale scopo, dopo aver chiamato UrsDeviceInitialize, il driver deve registrare le funzioni di callback 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 a doppio ruolo USB.

Nell'implementazione del driver client della EvtDeviceWdmPostPoFxRegisterDevice funzione di callback, il driver dovrebbe chiamare UrsSetPoHandle passando l'handle ricevuto. In alcune piattaforme, l'estensione della classe potrebbe usare POHANDLE per gestire il controller. Al contrario, prima che l'estensione della classe elimini la registrazione con il framework di alimentazione, richiama l'implementazione del driver client EvtDeviceWdmPrePoFxUnregisterDevice. È previsto che il driver chiami UrsSetPoHandle passando NULL come valore PoHandle.

Esempi



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

Fabbisogno

Requisito Valore
client minimo supportato Windows 10
server minimo supportato Windows Server 2016
piattaforma di destinazione Finestre
versione minima di KMDF 1.15
intestazione ursdevice.h (include Urscx.h)
libreria Urscxstub.lib
IRQL PASSIVE_LEVEL

Vedere anche

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice