Compartilhar via


Função UrsSetPoHandle (ursdevice.h)

Registra e exclui o registro do driver cliente com a PoFx (estrutura de gerenciamento de energia).

Sintaxe

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

Parâmetros

[in] Device

Um identificador para o objeto de dispositivo de estrutura que o driver cliente recuperou na chamada anterior para WdfDeviceCreate.

[in] PoHandle

Um identificador que representa o registro do dispositivo com PoFx. O driver cliente recebe esse identificador do WDF em funções de retorno de chamada EvtDeviceWdmPostPoFxRegisterDevice e EvtDeviceWdmPrePoFxUnregisterDevice .

Retornar valor

Nenhum

Comentários

O driver do cliente para o controlador de função dupla deve ser o proprietário da política de energia. O driver pode receber notificações da PoFx (estrutura de gerenciamento de energia). Para fazer isso, depois de chamar UrsDeviceInitialize, o driver deve registrar funções de retorno de chamada PoFx. O driver cliente registra o dispositivo diretamente com a estrutura de energia ou obtém um POHANDLE do WDF em EvtDeviceWdmPostPoFxRegisterDevice. Depois que o registro for bem-sucedido, o driver fornecerá esse identificador para a extensão de classe de função dupla USB.

Na implementação do driver cliente da função de retorno de chamada EvtDeviceWdmPostPoFxRegisterDevice , espera-se que o driver chame UrsSetPoHandle passando o identificador recebido. Em algumas plataformas, a extensão de classe pode usar o POHANDLE para gerenciar o controlador por energia. Por outro lado, antes que a extensão de classe exclua o registro com a estrutura de energia, ela invoca a implementação de EvtDeviceWdmPrePoFxUnregisterDevice do driver cliente. Espera-se que o driver chame UrsSetPoHandle passando NULL como o valor PoHandle.

Exemplos



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

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10
Servidor mínimo com suporte Windows Server 2016
Plataforma de Destino Windows
Versão mínima do KMDF 1.15
Cabeçalho ursdevice.h (inclua Urscx.h)
Biblioteca Urscxstub.lib
IRQL PASSIVE_LEVEL

Confira também

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice