相关疑难解决方法(0)

如果WinDbg附带断点,则驱动程序加载/卸载失败

我刚开始开发驱动程序.对于一些加载,卸载和调试的实验,我编写了以下简单的驱动程序:

#include <ntddk.h> 

void DriverUnload(PDRIVER_OBJECT pDriverObject) 
{ 
    UNREFERENCED_PARAMETER(pDriverObject);
    DbgPrint("Driver unloading\n"); 
} 

NTSTATUS DriverEntry( 
    PDRIVER_OBJECT DriverObject, 
    PUNICODE_STRING RegistryPath) 
{ 
    UNREFERENCED_PARAMETER(DriverObject);
    UNREFERENCED_PARAMETER(RegistryPath);

    DriverObject->DriverUnload = DriverUnload; 
    DbgPrint("Hello, World\n"); 

    return STATUS_SUCCESS; 
}
Run Code Online (Sandbox Code Playgroud)

我编译了我的目标系统驱动程序,Windows 7 64位,带有调试符号,将其复制到目标系统并加载并使用OSR Driver Loader运行它.

一切正常,我可以卸载并加载驱动程序:在此输入图像描述

我可以使用串行连接与WinDbg连接,并可以成功中断并运行目标系统.但是,当我尝试设置断点时会出现问题.

我最初尝试像这样设置断点:

kd> bp MyDriver1!DriverEntry

但问题是,如果我重新加载驱动程序并检查断点:

kd> bl
0 e fffff880`03572010 0001(0001)<Unloaded_MyDriver1.sys> + 0x1010

对于我作为初学者,它看起来不好(卸载?)并且在加载时没有发生中断.

所以,我发现在加载模块时可以设置断点:

kd> bu MyDriver1

0 e fffff880`03578000 0001(0001)MyDriver1!DriverEntry <PERF>(MyDriver1 + 0x0)

当我在上述命令之后继续系统执行并加载驱动程序(net start MyDriver1)时,系统崩溃:

中断指令异常 - 代码80000003(第一次机会)


  • *
  • 您看到此消息是因为您按了*
  • CTRL + C(如果你运行控制台内核调试器)或*
  • CTRL + BREAK(如果你运行GUI内核调试器),*
  • 在调试器机器的键盘上.*
  • *
  • 这不是一个BUG或系统崩溃*
  • *
  • 如果您不打算进入调试器,请按"g"键,然后按*
  • 现在按"Enter"键.此消息可能会立即重新出现.如果它* …

windbg driver wdk device-driver

3
推荐指数
1
解决办法
2150
查看次数

标签 统计

device-driver ×1

driver ×1

wdk ×1

windbg ×1