NdisScheduleWorkItem 函数 (ndis.h)

注意 NDIS 5。 x 已弃用,由 NDIS 6 取代。 x。 有关新的 NDIS 驱动程序开发,请参阅 从 Windows Vista 开始的网络驱动程序。 有关移植 NDIS 5 的信息。 NDIS 6 的 x 驱动程序。 x,请参阅 将 NDIS 5.x 驱动程序移植到 NDIS 6.0

NdisScheduleWorkItem 将给定的工作项插入队列中,系统工作线程从该队列中删除该项,并控制驱动程序先前提供给 NdisInitializeWorkItem 的回调函数。

语法

NDIS_STATUS NdisScheduleWorkItem(
  [in] __drv_aliasesMem PNDIS_WORK_ITEM WorkItem
);

参数

[in] WorkItem

指向由前面对 NdisInitializeWorkItem 的调用设置的工作项的指针。

返回值

NdisScheduleWorkItem 始终成功,因此始终返回NDIS_STATUS_SUCCESS。

注解

调用 NdisScheduleWorkItem 可让 NDIS 驱动程序延迟某些驱动程序确定的操作,这些操作可以或应该以低于当前对其工作线程回调函数运行的引发 IRQL 执行。

驱动程序的回调稍后在 IRQL = PASSIVE_LEVEL 的系统线程上下文中运行。 此调用方提供的函数负责回收驱动程序为 WorkItem 分配的存储。 例如,如果驱动程序调用 NdisAllocateMemoryWithTagNdisInitializeWorkItem 提供上下文区域,则其回调函数应在返回控件之前对 NdisFreeMemoryWorkItem 进行倒数调用。

如果驱动程序已持有一个同步对象并可能尝试获取另一个同步对象,则不得等待其回调例程完成操作。 例如,在调用 NdisScheduleWorkItem 之前,NDIS 驱动程序应释放 () 等当前持有的任何旋转锁。 在调用 NdisScheduleWorkItem 之前,最高级别的 NDIS 协议驱动程序还必须释放任何当前持有的信号灯、互斥体、资源变量等。 在对同步工作线程操作进行排队之前释放所有同步资源可防止死锁。

序列化的微型端口驱动程序不应尝试将工作线程回调例程排队,因为此类驱动程序无法将对其 NIC 上下文区域的访问 () 与工作线程回调同步。 因此,此类序列化的 NDIS 驱动程序不能与其工作线程回调函数共享其每个适配器上下文区域中的任何内容,而不会导致间歇性系统崩溃。

  • 目标平台: 通用
  • 版本:Windows Vista 中的 NDIS 6.0 驱动程序不支持。 请改用 NdisQueueIoWorkItem。 支持 Windows Vista 和 Windows XP 中的 NDIS 5.1 驱动程序。

要求

要求
Header ndis.h (包括 Ndis.h)
IRQL IRQL <= DISPATCH_LEVEL

另请参阅