c - Windows 7 驱动程序 - 仅运行一次然后需要重新启动

标签 c windows-7 drivers

最近,我一直在研究 Windows 7 中的驱动程序。到目前为止,我已经构建了一个可以与用户模式应用程序通信的驱动程序。 但是,我一直在启动和停止驱动程序时遇到问题。 首先,我安装驱动程序并启动它,它工作得很好。我停止它,它也停止得很好。但是,当我再次启动它时,它出错并显示错误 2 代码“找不到指定的文件”。

为了解决这个问题,我必须卸载驱动程序,然后重新启动。重新启动后,我可以再次安装它,并运行一次,然后整个过程重新开始。

所以我的问题是如何解决这个问题?我真的很讨厌每次重建和测试驱动程序时都必须重新启动,所以我想知道我在构建和部署过程中是否做错了什么。

我在构建过程中使用标准 DDK 命令行构建,并使用名为 OSR Driver Loader 的应用程序来加载驱动程序。不过,我也可以使用 SC 命令行来安装它。

最佳答案

我解决了。我需要删除我正在创建的符号链接(symbolic link),并删除设备实例。

这是我放入 OnUnload 函数的代码:

// this deletes the symbolic link for the driver
IoDeleteSymbolicLink(&deviceLinkUnicodeString);

// this deletes the device
IoDeleteDevice(g_RootkitDevice);

所以总的来说,我需要将其作为我的 OnUnload 函数:

VOID OnUnload(IN PDRIVER_OBJECT DriverObject)
{
    // this deletes the symbolic link for the driver
    IoDeleteSymbolicLink(&deviceLinkUnicodeString);

    // this deletes the device
    IoDeleteDevice(g_RootkitDevice);
}

关于c - Windows 7 驱动程序 - 仅运行一次然后需要重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41745709/

相关文章:

c - 在 C 中处理长递归产生式时如何防止堆栈溢出?

c - 使用 read() 函数读取文件

qt - Windows 7的OpenCV 2.2

linux - 如果普通程序和驱动程序都使用系统调用,那么设备驱动程序还有什么意义呢?

c++ - 图形驱动程序会导致我的应用程序发生内存泄漏吗?

c - 如果 stdout 是文件,则 stdout 重定向不起作用

c - 共享内存未同步更新

c# - Windows 7 中的未授权访问异常

delphi - 正确处理模态窗口 "Minimize"行为

c++ - 虚拟操纵杆驱动程序 (VJoyD) 和直接输入