次の方法で共有


PnP でないドライバーのアンロード ルーチン

初期のドライバーと上位のファイル システム ドライバーは PnP デバイスの削除要求を処理しないので、その Unload ルーチンでリソースの解放、デバイス オブジェクトの削除、デバイス スタックからのデタッチを実行する必要があります。

これらの処理を実行していない場合、レガシ デバイス ドライバーでは、その Unload ルーチンで、まずデバイスからの割り込みを無効にする必要があります。 上記の処理を実行済みの場合は、そのレガシ デバイス ドライバーの ISR を呼び出してデバイス割り込みを処理するとともに、その割り込みを処理する必要があるデバイス拡張機能で Unload ルーチンによってリソースを解放できます。 このような状況でこの ISR が問題なく実行されたとしても、Unload ルーチンが制御を再び取得する前に、この ISR によってキューに置かれた DpcForIsr ルーチンまたは CustomDpc ルーチンが実行されるほか、IRQL >= DISPATCH_LEVEL で実行される他のドライバー ルーチンも実行されることが考えられます。その結果、Unload ルーチンによって、他のドライバー ルーチンが参照するリソースが削除されたままになっている可能性が高くなります。 詳細については「ハードウェアの優先度の管理」を参照してください。

割り込みを無効にした後、ファイル システム ドライバーとレガシ ドライバーはリソースとオブジェクトを解放する必要があります。 詳細については以下の 2 つのセクションを参照してください。

ドライバーによって割り当てられたリソースの解放

デバイス オブジェクトとコントローラー オブジェクトの解放