我正在使用WinDbg调试驱动程序。在DriverUnload
函数中,调用KdBreakPoint()
。
当我从设备管理器中禁用设备时,WinDbg会进入DriverUnload
功能。
但是当我关机或重新启动Windows时(通过开始>关闭),调试器不会中断。
所以问题是:为什么Windows在重启或关机时不会调用DriverUnload
函数?
(顺便说一句:我已经在PNP调度函数中添加了断点以捕获IRP_MN_QUERY_REMOVE_DEVICE
/ IRP_MN_REMOVE_DEVICE
/ IRP_MN_QUERY_STOP_DEVICE
/ IRP_MN_STOP_DEVICE
,结果是相同的)
答案 0 :(得分:3)
啊,解决方案很“简单”。根本没有被召唤。不过,我不得不查一查。
Windows 2000设备驱动程序手册:程序员指南声明:
在系统关闭时不调用驱动程序的卸载例程。
另见this thread。
如果您有WDM驱动程序,请使用DispatchShutdown
(IRP_MJ_SHUTDOWN
)。
另请参阅关于“关闭调度例程[WDK内核]”和“关闭电源管理[WDK内核]”的WDK(7600)文档。