2014-01-30 85 views
4

前段时间我决定学习如何编写驱动程序。不幸的是,我没有做太多的工作,因为测试驱动程序时,无需重新启动机器就可以卸载驱动程序,这点很重要。现在我回到了它,但我无法自己过去。卸载Windows驱动程序

现在,我想只是为了使问题更直截了当,你一定要看到这一点:

VOID Unload(PDRIVER_Object DriverObject) 
{ 
    DbgPrint("Unload\r\n"); 
} 

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

    return STATUS_SUCCESS; 
} 

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

其实如果知道一些可以加载.sys然后能够卸载它的程序,可以放一个链接或名称。源代码不需要,可执行文件应该..或反之亦然..谢谢。

+0

使用[VisualDDK](http://visualddk.sysprogs.org/)在虚拟机中调试? –

+0

没有VS的IDE工作吗? – Pyjong

+0

@gbjbaanb:好的,那肯定是有进展的,司机不会停留太久,但至少我可以看到卸载消息,非常感谢 – Pyjong

回答

0

好了,问题是我/驱动器链接:WDM因为我读旧的教程。现在这是错误的,你只能在传统驱动程序的DriverEntry中使用IoCreateDevice,这意味着恰当的选项只是/ driver。对不起,我不了解I/O管理器的行为,但如果你遇到同样的问题,只要摆脱那个wdm标志,它就会卸载。