Функция 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 при успешном выполнении или один из следующих кодов ошибок при сбое:
Код возврата | Описание |
---|---|
|
Не удалось отправить элемент. |
Комментарии
Существует два распространенных случая отправки операций в рабочие потоки:
- Для очень редких операций пространство можно сэкономить, динамически выделяя и освобождая память для элемента рабочей очереди, когда это необходимо. В этом случае будет использоваться подпрограмма 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 |