NDIS I/O 工作项

驱动程序可以将 I/O 工作项回调函数排队,以便以后执行。 NDIS 在 IRQL = PASSIVE_LEVEL 调用驱动程序指定的回调函数。 这通过允许当前函数立即返回,并允许驱动程序稍后在较低的 IRQL 下执行工作来提高系统性能。

NDIS 6.0 及更高版本为内核 I/O 工作项例程 IoAllocateWorkItemIoFreeWorkItemIoQueueWorkItem 提供包装函数。 NDIS 使用专用 NDIS_IO_WORKITEM 结构,而不是专用 IO_WORKITEM 结构。

NDIS 6.0 驱动程序调用 NdisAllocateIoWorkItem 函数来分配工作项。 NDIS 微型端口驱动程序将 NDIS 传递给 MiniportInitializeEx 函数的适配器句柄传递 NdisAllocateIoWorkItemNdisAllocateIoWorkItem 获取与句柄关联的设备对象,并将设备对象传递给 IoAllocateWorkItem 例程。 筛选器驱动程序传入筛选器句柄。

注意 协议驱动程序不能使用 NdisAllocateIoWorkItem ,因为 NDIS 不会将协议驱动程序与设备对象相关联。

NDIS 驱动程序调用 NdisQueueIoWorkItem 函数将工作项排队。 NDIS 工作项使用 CriticalWorkQueue 队列类型。

NDIS 驱动程序必须调用 NdisFreeIoWorkItem 函数,以释放与 NdisAllocateIoWorkItem 分配的工作项关联的资源。

系统工作线程