Função RxDispatchToWorkerThread (rxworkq.h)

RxDispatchToWorkerThread invoca uma rotina no contexto de um thread de trabalho. A memória do WORK_QUEUE_ITEM é alocada por essa rotina.

Sintaxe

NTSTATUS RxDispatchToWorkerThread(
  [in] IN PRDBSS_DEVICE_OBJECT     pMRxDeviceObject,
  [in] IN WORK_QUEUE_TYPE          WorkQueueType,
  [in] IN PRX_WORKERTHREAD_ROUTINE Routine,
  [in] IN PVOID                    pContext
);

Parâmetros

[in] pMRxDeviceObject

Um ponteiro para o objeto de dispositivo do driver de minidiretório de rede correspondente.

[in] WorkQueueType

O tipo da fila de trabalho que representa a prioridade da tarefa. O parâmetro WorkQueueType pode ser uma das seguintes enumerações para WORK_QUEUE_TYPE:

CriticalWorkQueue

Insira o WORK_QUEUE_ITEM na fila da qual um thread do sistema com um atributo de prioridade em tempo real processará o item de trabalho.

DelayedWorkQueue

Insira o WORK_QUEUE_ITEM na fila da qual um thread do sistema com um atributo de prioridade variável processará o item de trabalho.

HyperCriticalWorkQueue

Insira o WORK_QUEUE_ITEM na fila da qual um thread do sistema processará o item de trabalho para que a rotina a ser invocada não seja bloqueada.

[in] Routine

Um ponteiro para a rotina a ser invocada.

[in] pContext

Um ponteiro para um parâmetro de contexto associado ao item de trabalho a ser concluído que é passado para o driver.

Retornar valor

RxDispatchToWorkerThread retorna STATUS_SUCCESS com êxito ou um dos seguintes códigos de erro em caso de falha:

Código de retorno Descrição
STATUS_INSUFFICIENT_RESOURCES
Não foi possível expedir o item.

Comentários

Há dois casos comuns de operações de expedição para threads de trabalho:

  • Para uma operação muito pouco frequente, o espaço pode ser conservado alocando e liberando memória dinamicamente para o item da fila de trabalho quando for necessário. A rotina RxDispatchToWorkerThread seria usada nesse caso
  • Quando uma operação será expedida repetidamente, o tempo será conservado alocando com antecedência o WORK_QUEUE_ITEM como parte da estrutura de dados a ser expedida e usando essa memória pré-alocada repetidamente. A rotina RxPostToWorkerThread seria usada nesse caso
A compensação entre as duas operações de expedição é tempo versus espaço (uso de memória).

O RxDispatchToWorkerThread invoca uma rotina no contexto de um thread de trabalho. A memória do WORK_QUEUE_ITEM é alocada pela rotina RxDispatchToWorkerThread da memória do pool não paginado. Portanto, essa rotina poderá falhar se recursos insuficientes estiverem disponíveis.

A implementação atual das filas de rotina RxDispatchToWorkerThread funciona no mesmo processador do qual a chamada foi originada.

Se a rotina RxDispatchToWorkerThread falhar em um build de depuração, a rotina _RxLog será chamada com detalhes do erro. Se a rotina RxDispatchToWorkerThread falhar e o WMI estiver habilitado no kernel, os detalhes do erro serão registrados no WMI.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho rxworkq.h (inclua Rxworkq.h, Rxstruc.h, Ntifs.h)
IRQL <= APC_LEVEL

Confira também

RxPostToWorkerThread

RxSpinDownMRxDispatcher