Compartilhar via


Função RxPostToWorkerThread (rxworkq.h)

RxPostToWorkerThread invoca uma rotina passada como um parâmetro no contexto de um thread de trabalho. A memória do WORK_QUEUE_ITEM deve ser alocada pelo chamador.

Sintaxe

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

Parâmetros

[in] pMRxDeviceObject

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

[in] WorkQueueType

O tipo da fila de trabalho que representa a prioridade da tarefa. Esse parâmetro pode ser um dos seguintes valores:

CriticalWorkQueue

Insira 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 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 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] pWorkQueueItem

Um ponteiro para WORK_QUEUE_ITEM.

[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.

Valor de retorno

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

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

Observações

Há dois casos comuns de operações de expedição para threads de trabalho. A compensação entre as duas operações de expedição a seguir é tempo versus espaço (uso de memória):

  • Quando uma operação será expedida repetidamente, o tempo é conservado alocando antecipadamente a estrutura WORK_QUEUE_ITEM como parte da estrutura de dados a ser expedida. Nesse caso, use a rotina de RxPostToWorkerThread.
  • Para uma operação pouco frequente, você pode economizar espaço alocando e liberando memória dinamicamente para o item de fila de trabalho quando necessário. Nesse caso, use a rotina de RxDispatchToWorkerThread.
A rotina RxPostToWorkerThread invoca uma rotina no contexto de um thread de trabalho. A memória da estrutura de WORK_QUEUE_ITEM deve ser alocada da memória do pool não paginada pela rotina de chamada.

A implementação atual do RxPostToWorkerThread filas de rotina funcionam no mesmo processador do qual a chamada se originou.

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

Requisitos

Requisito Valor
da Plataforma de Destino Área de trabalho
cabeçalho rxworkq.h (include Rxworkq.h, Rxstruc.h, Ntifs.h)
IRQL <= APC_LEVEL

Consulte também

RxDispatchToWorkerThread

RxSpinDownMRxDispatcher

_RxLog