Compartilhar via


DRIVER_PROXY_REGISTER_CALLBACK função de retorno de chamada (wdm.h)

O retorno de chamada DRIVER_PROXY_REGISTER_CALLBACK define uma rotina que é invocada em diferentes fases durante o registro do ponto de extremidade driverProxy e operações de hot-swap.

Sintaxe

DRIVER_PROXY_REGISTER_CALLBACK DriverProxyRegisterCallback;

NTSTATUS DriverProxyRegisterCallback(
  DRIVER_PROXY_REGISTER_CALLBACK_PHASE Phase,
  PVOID Context
)
{...}

Parâmetros

Phase

[in] Um valor DRIVER_PROXY_REGISTER_CALLBACK_PHASE que indica qual fase do processo de registro está sendo executada no momento.

Context

[in, opcional] Um ponteiro para informações de contexto definidas pelo driver que foram passadas para IoRegisterDriverProxyEndpoints. Esse parâmetro poderá ser NULL se nenhum contexto tiver sido fornecido.

Valor de retorno

DRIVER_PROXY_REGISTER_CALLBACK retorna um dos seguintes valores NTSTATUS:

Código de retorno Description
STATUS_SUCCESS O retorno de chamada foi concluído com êxito. O processo de registro do ponto de extremidade continuará para a próxima fase.
Outros valores NTSTATUS O retorno de chamada encontrou um erro. Toda a operação de registro do ponto de extremidade falhará e todas as alterações parciais serão revertidas.

Observações

Esse retorno de chamada permite que os drivers executem operações personalizadas em pontos específicos durante o processo de registro do ponto de extremidade, permitindo a coordenação com o mecanismo de hot-swap.

Esse retorno de chamada é invocado por IoRegisterDriverProxyEndpoints durante o registro do ponto de extremidade e as operações de hot-swap. O retorno de chamada é executado em PASSIVE_LEVEL e oferece aos drivers a oportunidade de coordenar com o sistema DriverProxy durante fases críticas do processo de hot-swap.

O retorno de chamada é invocado em uma sequência específica durante o registro do ponto de extremidade:

  1. Fase de pré-processamento: chamada antes de qualquer alternância de função de ponto de extremidade começar. Os drivers podem usar essa fase para se preparar para a próxima alteração, como:

    • Aquisição de bloqueios específicos do driver
    • Salvando o estado atual
    • Notificando outros componentes do driver
    • Preparando recursos necessários durante a opção
  2. Fase paralisada do proxy: chamada enquanto todas as chamadas para pontos de extremidade registrados são bloqueadas. Durante essa fase, o sistema DriverProxy mantém o bloqueio de rundown e nenhuma nova chamada para funções de ponto de extremidade continuará. Esse é o momento mais seguro para executar operações que exigem acesso exclusivo aos recursos que podem ser acessados por funções de ponto de extremidade, como:

    • Atualizando estruturas de dados compartilhadas
    • Reconfigurando o hardware
    • Modificando o estado do driver global
  3. Fase pós-processamento: chamado após a conclusão da troca de função de ponto de extremidade e a operação normal foi retomada. Os drivers podem usar essa fase para operações de limpeza, como:

    • Liberando bloqueios específicos do driver
    • Atualizando o estado interno
    • Notificando outros componentes de conclusão
    • Registro em log ou acompanhamento de desempenho

O retorno de chamada deve retornar STATUS_SUCCESS para que o registro continue. Qualquer falha fará com que toda a operação falhe e reverta.

Durante a fase DriverProxyRegisterCallbackProxyStalled , todas as chamadas de ponto de extremidade são bloqueadas, portanto, o retorno de chamada deve executar operações rapidamente para minimizar a interrupção do sistema.

O retorno de chamada não deve executar operações que possam chamar de volta para a mesma extensão DriverProxy, pois isso pode causar deadlocks.

O retorno de chamada é opcional e pode ser NULL se nenhuma coordenação específica do driver for necessária durante o registro do ponto de extremidade.

Requirements

Requirement Value
da Plataforma de Destino Universal
Header wdm.h
IRQL PASSIVE_LEVEL

Consulte também

IoRegisterDriverProxyEndpoints

DRIVER_PROXY_REGISTER_CALLBACK_PHASE

DRIVER_PROXY_ENDPOINT_INFORMATION

IoCreateDriverProxyExtension