Функция 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 (включая Rxworkq.h, Rxstruc.h, Ntifs.h)
IRQL <= APC_LEVEL

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

RxPostToWorkerThread

RxSpinDownMRxDispatcher