ネットワーク ドライバーの 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 は、このようなメカニズムを提供します。