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