ほとんどのドライバーのディスパッチ ルーチンは、IRQL = PASSIVE_LEVELの任意のスレッド コンテキストで呼び出されます。ただし、次の例外があります。
最上位レベルのドライバーのディスパッチ ルーチンは、I/O 要求を発生させたスレッドのコンテキストで呼び出されます。これは通常、ユーザー モードのアプリケーション スレッドです。
言い換えると、ファイル システム ドライバーやその他の最上位レベルのドライバーのディスパッチ ルーチンは、IRQL = PASSIVE_LEVELの非arbitrary スレッド コンテキストで呼び出されます。
最下位レベルのデバイス ドライバーの DispatchRead、DispatchWrite、DispatchDeviceControl ルーチン、およびシステム ページング パス内のそれらの上に重ねて配置された中間ドライバーの DispatchRead、 DispatchWrite、 DispatchDeviceControl ルーチンは、IRQL = APC_LEVELおよび任意のスレッド コンテキストで呼び出すことができます。
DispatchRead ルーチンや DispatchWrite ルーチン、およびこのような最下位レベルのデバイスまたは中間ドライバーで読み取り要求や書き込み要求を処理するその他のルーチンは、常に常駐している必要があります。 これらのドライバー ルーチンは、ページングすることも、ドライバーのページング可能イメージ セクションの一部にすることもできません。ページング可能なメモリにはアクセスできません。 さらに、ブロック呼び出し (0 以外のタイムアウトがある KeWaitForSingleObject など) に依存しないようにする必要があります。
休止状態パスまたはページング パス内のドライバーの DispatchPower ルーチンは、IRQL = DISPATCH_LEVEL で呼び出すことができます。 このようなドライバーの DispatchPnP ルーチンは、PnP IRP_MN_DEVICE_USAGE_NOTIFICATION 要求を処理するために準備する必要があります。
起動時に突入電力を必要とするドライバーの DispatchPower ルーチンは、IRQL = DISPATCH_LEVELで呼び出すことができます。
詳細については、「 ハードウェア優先度の管理」を参照してください。