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

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

Синтаксис

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

Параметры

[in] pMRxDeviceObject

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

[in] WorkQueueType

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

CriticalWorkQueue

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

DelayedWorkQueue

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

HyperCriticalWorkQueue

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

[in] Routine

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

[in] pContext

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

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

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

Возвращаемый код Описание
STATUS_INSUFFICIENT_RESOURCES
Не удалось отправить элемент.

Замечания

Существует два распространенных случая отправки операций в рабочие потоки:

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

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

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

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

Требования

Требование Ценность
целевая платформа Настольный
заголовка rxworkq.h (include Rxworkq.h, Rxstruc.h, Ntifs.h)
IRQL <= APC_LEVEL

См. также

RxPostToWorkerThread

RxSpinDownMRxDispatcher