Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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