3

我正在用 WinDbg 调试驱动程序。在DriverUnload函数中,调用了KdBreakPoint().

当我从设备管理器禁用设备时,WinDbg 会进入该DriverUnload功能。

但是当我关闭或重新启动 Windows(通过开始 > 关闭)时,调试器不会中断。那么问题来了:为什么windowsDriverUnload在重启或关机时不调用该函数呢?

(BTW:我已经在PNP调度函数中加了断点来catch/// IRP_MN_QUERY_REMOVE_DEVICEIRP_MN_REMOVE_DEVICE结果是一样的IRP_MN_QUERY_STOP_DEVICEIRP_MN_STOP_DEVICE

4

1 回答 1

3

啊,解决方案很“简单”。它根本没有被调用。不过,我不得不查一下。

Windows 2000 设备驱动程序手册:程序员指南指出:

系统关闭时不调用驱动程序的卸载例程。

另请参阅此线程

如果您有 WDM 驱动程序,请使用DispatchShutdown( IRP_MJ_SHUTDOWN)。

另请查看有关“关闭调度例程 [WDK 内核]”和“关闭电源管理 [WDK 内核]”的 WDK (7600) 文档。

于 2012-07-12T13:01:31.353 回答