NdisScheduleWorkItem 函数 (ndis.h)

注释 NDIS 5。 x 已被弃用,并被 NDIS 6 取代。 x。 有关新的 NDIS 驱动程序开发,请参阅从 Windows Vista 开始网络驱动程序。 有关移植 NDIS 5 的信息。 将 x 驱动程序 到 NDIS 6。 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,该作当前运行到其工作线程回调函数。

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

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

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

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

要求

要求 价值
标头 ndis.h (包括 Ndis.h)
IRQL IRQL <= DISPATCH_LEVEL

另请参阅