Поделиться через


Функция RxPostToWorkerThread (rxworkq.h)

RxPostToWorkerThread вызывает подпрограмму, переданную в качестве параметра в контексте рабочего потока. Память для WORK_QUEUE_ITEM должна быть выделена вызывающим объектом.

Синтаксис

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
);

Параметры

[in] pMRxDeviceObject

Указатель на объект устройства соответствующего драйвера мини-перенаправления сети.

[in] WorkQueueType

Тип рабочей очереди, представляющей приоритет задачи. Этот параметр может иметь одно из следующих значений:

CriticalWorkQueue

Вставьте WORK_QUEUE_ITEM в очередь, из которой системный поток с атрибутом приоритета в режиме реального времени будет обрабатывать рабочий элемент.

DelayedWorkQueue

Вставьте WORK_QUEUE_ITEM в очередь, из которой системный поток с атрибутом переменной приоритета будет обрабатывать рабочий элемент.

HyperCriticalWorkQueue

Вставьте WORK_QUEUE_ITEM в очередь, из которой системный поток будет обрабатывать рабочий элемент, чтобы вызываемая подпрограмма не блокировалась.

[in] pWorkQueueItem

Указатель на WORK_QUEUE_ITEM.

[in] Routine

Указатель на вызываемую подпрограмму.

[in] pContext

Указатель на параметр контекста, связанный с рабочим элементом для завершения, который передается драйверу.

Возвращаемое значение

RxDispatchToWorkerThread возвращает STATUS_SUCCESS при успешном выполнении или один из следующих кодов ошибки при сбое:

Код возврата Описание
STATUS_INSUFFICIENT_RESOURCES
Не удалось отправить элемент.

Комментарии

Существует два распространенных случая отправки операций в рабочие потоки. Компромиссом между следующими двумя операциями диспетчеризации является время и пространство (использование памяти):

  • При повторной отправке операции время экономится за счет предварительного выделения структуры WORK_QUEUE_ITEM в составе структуры данных, которую необходимо отправить. В этом случае используйте подпрограмму RxPostToWorkerThread .
  • Для редкой операции можно экономить место, динамически выделяя и освобождая память для элемента рабочей очереди, когда это необходимо. В этом случае используйте подпрограмму RxDispatchToWorkerThread .
Подпрограмма RxPostToWorkerThread вызывает подпрограмму в контексте рабочего потока. Память для структуры WORK_QUEUE_ITEM должна быть выделена из памяти нестраничного пула вызывающей подпрограммой.

Текущая реализация очередей подпрограмм RxPostToWorkerThread работает на том же процессоре, из которого был получен вызов.

Если подпрограмма RxPostToWorkerThread завершается сбоем при отладочной сборке, вызывается _RxLog подпрограмма с подробными сведениями об ошибке. Если подпрограмма RxPostToWorkerThread завершается сбоем и в ядре включен инструментарий WMI, сведения об ошибке записываются в журнал с помощью инструментария WMI.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть rxworkq.h (включая Rxworkq.h, Rxstruc.h, Ntifs.h)
IRQL <= APC_LEVEL

См. также раздел

RxDispatchToWorkerThread

RxSpinDownMRxDispatcher

_RxLog