Compartilhar via


Função IoDriverProxyCreateHotSwappableWorkerThread (wdm.h)

A função IoDriverProxyCreateHotSwappableWorkerThread cria um thread de trabalho com troca frequente que fornece um thread de trabalho "spin waiting" compatível com o Driver Hot-Swap. Essa função é particularmente útil para lidar com loops infinitos e operações de execução longa em drivers que precisam permanecer frequentes.

Sintaxe

NTSTATUS IoDriverProxyCreateHotSwappableWorkerThread(
  PDRIVER_PROXY_EXTENSION                            DriverProxyExtension,
  PHANDLE                                            ThreadHandle,
  ULONG                                              DesiredAccess,
  POBJECT_ATTRIBUTES                                 ObjectAttributes,
  HANDLE                                             ProcessHandle,
  PCLIENT_ID                                         ClientId,
  PDRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT WorkerStartContext
);

Parâmetros

DriverProxyExtension

[in] Um ponteiro para a extensão DriverProxy na qual os pontos de extremidade estão registrados. A rotina de trabalho especificada em WorkerStartContext deve ser um wrapper de ponto de extremidade registrado.

ThreadHandle

[out] Um ponteiro para uma variável que recebe o identificador para o thread criado.

DesiredAccess

[in] Os direitos de acesso desejados para o identificador de thread.

ObjectAttributes

[in, opcional] Um ponteiro para uma estrutura OBJECT_ATTRIBUTES* que especifica atributos para o objeto thread. Esse parâmetro pode ser NULL.

ProcessHandle

[in, opcional] Um identificador para o processo no qual o thread é criado. Se NULL, o thread será criado no processo atual.

ClientId

[out, opcional] Um ponteiro para a estrutura CLIENT_ID do thread criado. Esse parâmetro pode ser NULL.

WorkerStartContext

[in] Um ponteiro para uma estrutura de DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT que contém a configuração do thread de trabalho, incluindo a rotina de trabalho e os objetos de evento para aguardar.

Valor de retorno

IoDriverProxyCreateHotSwappableWorkerThread retorna um dos seguintes valores NTSTATUS:

Código de retorno Description
STATUS_SUCCESS O thread de trabalho com troca frequente foi criado com êxito.
STATUS_NOT_SUPPORTED A funcionalidade DriverProxy não está disponível no sistema atual.
STATUS_INVALID_PARAMETER Um ou mais parâmetros são inválidos, como uma rotina de trabalho NULL ou uma contagem de eventos inválida.
STATUS_INSUFFICIENT_RESOURCES Memória insuficiente estava disponível para criar o contexto do thread ou estruturas de suporte.

Observações

Essa função cria um thread de trabalho especializado que se integra ao sistema DriverProxy, permitindo que a rotina de trabalho seja trocada durante a execução do thread. Isso é particularmente útil para drivers que precisam executar operações contínuas em segundo plano que devem persistir entre as atualizações de driver.

A rotina de trabalho especificada no WorkerStartContext deve ser um wrapper de ponto de extremidade registrado obtido por meio do processo de registro do DriverProxy. Esse requisito permite a funcionalidade hot-swappable, permitindo que os drivers atualizem sua lógica de trabalho sem interromper operações em segundo plano de execução prolongada.

O thread de trabalho opera em um loop, aguardando os eventos especificados e chamando a rotina de trabalho quando os eventos são sinalizados. A rotina de trabalho pode indicar se o thread deve continuar em execução ou terminar.

A função faz uma cópia da estrutura WorkerStartContext , para que o chamador possa descartar com segurança a estrutura original após o retorno da função. A função deve ser chamada em PASSIVE_LEVEL, pois executa a alocação de memória e a criação de threads.

Requirements

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

Consulte também

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE

IoRegisterDriverProxyEndpointsPsCreateSystemThread