我正在玩Win7 DDK中的一个内核驱动程序示例。我可以修改编译并构建我的* .sys文件。我也可以使用INF(使用设备管理器或devcon)或直接使用服务控制管理器来安装它。当我进行下一次更改并生成更新的* .sys文件时,我似乎在这个新文件和我现在停止的驱动程序之间发生冲突(我尝试过使用Servcie控制管理器'停止'和'删除服务'等)。如果我重新启动,我可以安装新驱动程序并运行正常。同样,如果我在“设备管理器”中选择“卸载”,Windows会提示我重新启动。
那么,如何轻松地轻松测试对内核驱动程序的增量修改? 谢谢
答案 0 :(得分:4)
查看安装程序API日志可能是一个很好的起点:http://msdn.microsoft.com/en-us/library/ff550887%28v=VS.85%29.aspx
如果devcon提示重新启动,你可以查看DDK中的代码,调试它为什么要问这个问题并以这种方式深入研究。
答案 1 :(得分:3)
是。 sc stop <driver name>
应该阻止你的司机。如果您的驱动程序与特定的PnP devnode相关联,则应该在删除devnode后卸载它。
答案 2 :(得分:3)
如果您希望能够卸载驱动程序,则必须设置一个基本上每次卸载驱动程序时执行的功能 - 很可能您将放置释放已分配缓冲区的代码以及可能“活动”的任何其他资源在驱动程序的生命周期中。这是一个示例代码:
VOID Unload(IN PDRIVER_OBJECT pDriverObject) {
//do whatever you like here
//this deletes the device
IoDeleteDevice( pDriverObject->DeviceObject);
return;
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING regPath) {
//initialize your driver and the major function array
//set the unload function
pDriverObject->DriverUnload = &Unload;
}
答案 3 :(得分:1)
尝试编译,签名和加载此代码:
#include <ntddk.h>
VOID OnUnload( IN PDRIVER_OBJECT driverObjectA ) {
DbgPrint("Unload\n");
}
NTSTATUS DriverEntry( PDRIVER_OBJECT driverObjectA, PUNICODE_STRING RegistryPath ){
DbgPrint("DriverEntry\n");
driverObjectA->DriverUnload = OnUnload;
return STATUS_SUCCESS;
}
然后下载DebugView,解压缩,以管理员身份运行,然后在“Capture”菜单项下“Capture Kernel”。下载,解压缩并运行OSR Driver Loader,注册驱动程序,“启动服务”。您将在DbgView中观察到“DriverEntry”日志消息。现在在OSR驱动程序加载程序中,“停止服务”并观察卸载消息。希望这能让你前进。