8

我正在使用 Win7 DDK 中的内核驱动程序示例之一。我可以修改编译和构建我的 *.sys 文件。我也可以使用它的 INF(使用设备管理器或 devcon)或直接使用服务控制管理器来安装它。当我进行下一次更改并生成更新的 *.sys 文件时,我似乎在这个新文件和我现在停止的驱动程序之间遇到了冲突(我尝试使用 Servcie Control Manager 'stop' 和 'delete service' 等)。如果我重新启动,我可以安装新驱动程序并正常运行。同样,如果我在设备管理器中选择卸载,Windows 会提示我重新启动。

那么,如何轻松测试对内核驱动程序的增量修改呢?谢谢

4

4 回答 4

5

查看 Setup API 日志可能是一个不错的起点:http: //msdn.microsoft.com/en-us/library/ff550887%28v=VS.85%29.aspx

如果 devcon 提示重新启动,您可以查看 DDK 中的代码,调试它询问的原因并以这种方式深入研究问题。

于 2011-01-30T23:35:11.467 回答
4

是的。 sc stop <driver name>应该阻止你的司机。如果您的驱动程序与特定的 PnP devnode 相关联,则应在删除 devnode 后将其卸载。

于 2011-01-30T18:39:20.380 回答
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; 
}
于 2011-02-14T04:11:14.560 回答
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 Driver loader 中,“Stop Service”并观察 Unload 消息。希望这能让你继续前进。

于 2014-01-06T15:03:48.903 回答