NDIS 调用的每个驱动程序函数在系统确定的 IRQL(PASSIVE_LEVEL < DISPATCH_LEVEL < DIRQL 之一)上运行。 例如,微型端口驱动程序的 初始化 函数、 停止 函数、 重置 函数和 关闭 函数通常在PASSIVE_LEVEL运行,但如果系统需要重置和关闭函数,则可以在更高的 IRQL 中调用重置和关闭函数。 中断代码在 DIRQL 上运行,因此 NDIS 中间驱动程序或协议驱动程序永远不会在 DIRQL 上运行。 所有其他 NDIS 驱动程序函数都在 IRQL = DISPATCH_LEVEL 或以下级别运行。
驱动程序函数运行所在的 IRQL 会影响它可以调用的 NDIS 函数。 某些函数只能在 IRQL = PASSIVE_LEVEL调用。 其他可以在DISPATCH_LEVEL或更低级别调用。 应检查每个 NDIS 函数是否存在 IRQL 限制。
与驱动程序的中断服务例程(ISR)共享资源的所有驱动程序函数都必须能够将其 IRQL 提升到 DIRQL,以防止竞争条件。 NDIS 提供了这样的机制。