卸载Windows驱动程序

Pyj*_*ong 5 c windows winapi driver

前段时间我决定学习如何编写驱动程序.不幸的是,我并没有走得太远,因为对于驱动程序的测试而言,能够在不需要重新启动机器的情况下卸载驱动程序是很重要的.现在我回到了它,但我无法自己解决这个问题.

现在我想只是为了让问题更直接,你肯定想看到这个:

VOID Unload(PDRIVER_Object DriverObject)
{
  DbgPrint("Unload\r\n");
}
Run Code Online (Sandbox Code Playgroud)

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath)
{
  DbgPrint("Entry\r\n");
  pDriverObject->DriverUnload = Unload;

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

在DbgView中,它打印"Entry"消息,但在卸载驱动程序时,它不会打印"卸载"消息.实际上,尝试停止驱动程序服务会将其状态更改为NOT_STOPPABLE.如果我想再试一次,我必须重新启动.我使用Windows 7并且具有相同的结果,我尝试使用TESTSIGNING ON启动并且不需要任何签名.有点奇怪的是除非我在入口函数中创建设备,否则加载不起作用.只有这样我才能在\ Driver目录中找到带有winobj的驱动程序.我也在另一台安装了Win7的机器上尝试过,但事实证明本地设置不是问题.如果您认识到这种内核行为,我真的很想听到它,谢谢.

实际上,如果知道一些可以加载.sys然后能够卸载它的程序,请删除一个链接或名称.源代码不是必需的,可执行文件应该做..反之亦然..谢谢.

Pyj*_*ong 0

好吧,问题是我与 /driver:wdm 链接,因为我读了一个较旧的教程。如今这是错误的,您只能在旧版驱动程序的 DriverEntry 中使用 IoCreateDevice,这意味着正确的选项就是 /driver。抱歉,我不明白 I/O 管理器的行为,但如果您遇到同样的问题,只需去掉该 wdm 标志,它就会卸载。