Функция 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 при успешном выполнении или один из следующих кодов ошибки при сбое:
Код возврата | Описание |
---|---|
|
Не удалось отправить элемент. |
Комментарии
Существует два распространенных случая отправки операций в рабочие потоки. Компромиссом между следующими двумя операциями диспетчеризации является время и пространство (использование памяти):
- При повторной отправке операции время экономится за счет предварительного выделения структуры WORK_QUEUE_ITEM в составе структуры данных, которую необходимо отправить. В этом случае используйте подпрограмму RxPostToWorkerThread .
- Для редкой операции можно экономить место, динамически выделяя и освобождая память для элемента рабочей очереди, когда это необходимо. В этом случае используйте подпрограмму RxDispatchToWorkerThread .
Текущая реализация очередей подпрограмм RxPostToWorkerThread работает на том же процессоре, из которого был получен вызов.
Если подпрограмма RxPostToWorkerThread завершается сбоем при отладочной сборке, вызывается _RxLog подпрограмма с подробными сведениями об ошибке. Если подпрограмма RxPostToWorkerThread завершается сбоем и в ядре включен инструментарий WMI, сведения об ошибке записываются в журнал с помощью инструментария WMI.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | rxworkq.h (включая Rxworkq.h, Rxstruc.h, Ntifs.h) |
IRQL | <= APC_LEVEL |