网络驱动程序中的 IRQL

NDIS 调用的每个驱动程序函数在系统确定的 IRQL 上运行, (PASSIVE_LEVEL < DISPATCH_LEVEL < DIRQL) 之一。 例如,微型端口驱动程序的 初始化 函数、 停止 函数、 重置 函数和 关闭 函数通常在PASSIVE_LEVEL运行,不过,如果系统需要,可以在更高的 IRQL 中调用重置和关闭函数。 中断代码在 DIRQL 上运行,因此 NDIS 中间驱动程序或协议驱动程序永远不会在 DIRQL 上运行。 所有其他 NDIS 驱动程序函数在 IRQL = DISPATCH_LEVEL 下运行。

运行驱动程序函数的 IRQL 会影响它可以调用的 NDIS 函数。 只能在 IRQL = PASSIVE_LEVEL 调用某些函数。 其他可在DISPATCH_LEVEL或更低位置调用。 对于 IRQL 限制,应检查每个 NDIS 函数。

任何与驱动程序的中断服务例程共享资源的驱动程序函数 (ISR) 都必须能够将其 IRQL 提升到 DIRQL,以防止争用情况。 NDIS 提供此类机制。