3

WinDbgを使用してドライバーをデバッグしています。DriverUnload関数には、への呼び出しがありますKdBreakPoint()

デバイスマネージャからデバイスを無効にすると、WinDbgが機能に侵入しDriverUnloadます。

しかし、Windowsをシャットダウンまたは再起動すると([スタート]> [シャットダウン]を選択)、デバッガーが壊れません。DriverUnloadしたがって、問題は、Windowsが再起動またはシャットダウン時に関数を呼び出さないのはなぜですか?

(ところで:私はすでにIRP_MN_QUERY_REMOVE_DEVICE/ IRP_MN_REMOVE_DEVICE/ IRP_MN_QUERY_STOP_DEVICE/をキャッチするためにPNPディスパッチ関数にブレークポイントを追加しましIRP_MN_STOP_DEVICEた、結果は同じです)

4

1 に答える 1

3

ああ、解決策は「簡単」です。まったく呼ばれていません。しかし、私はそれを調べなければなりませんでした。

Windows 2000デバイスドライバブック:プログラマー向けガイドには次のように記載されています。

ドライバーのアンロードルーチンは、システムのシャットダウン時に呼び出されません。

このスレッドも参照してください。

WDMドライバーを使用している場合は、DispatchShutdownIRP_MJ_SHUTDOWN)を使用します。

また、「シャットダウンディスパッチルーチン[WDKカーネル]」および「シャットダウン電源管理[WDKカーネル]」に関するWDK(7600)のドキュメントも確認してください。

于 2012-07-12T13:01:31.353 に答える