0

这是场景。我在windows 8机器上/也在windows 7机器上试过这个。

我正在研究驱动程序(镜像驱动程序/远程显示驱动程序)。我应该说我要开始工作了,因为我被困住了。

所以我遵循了 KmdfSmall 的 MSDN 示例

http://msdn.microsoft.com/en-us/library/windows/hardware/hh439665(v=vs.85).aspx

我编译了驱动程序代码。远程调试也开始了。

我在主机上看不到任何调试消息(我已将寄存器 IHVDRIVER 设置为 0x8 我还将 DEFAULT 设置为 0xf 以便能够使用 DbgPrint

此外。我真正的目标是启动我的驱动程序即服务

http://www.codeproject.com/Articles/9504/Driver-Development-Part-1-Introduction-to-Drivers

我想在本地机器上测试它。我不想有一个目标和主机来调试。普通的老式单机。

问题

1)当服务通过CreateServiceand启动驱动程序时OpenService,它是调用 DriverEntry 函数还是等到有人用户级应用程序使用驱动程序。

2)当我运行应用程序以将驱动程序加载为服务器时, DbgPrintEx 假设在哪里打印 DebugView 或 WinDbg 或其他位置。

3)如果我正在使用

CreateService

我的 sys 文件必须在 windows/system32/drivers 文件夹中吗?我在某处读到 64 位机器CreateService仅从系统文件夹加载。

4)当我将它作为服务启动时,我想在任务管理器上看到它

5)如果DriverEntry被调用来初始化驱动程序,可以再次调用它还是必须等到它卸载?所以我加载我的驱动程序并忘记优雅地卸载它并再次运行我的程序它会调用DriverEntry吗?

我知道这里有很多问题。提前致谢

4

1 回答 1

2

无法使用旧式 API 安装 KMDF 驱动程序。从 MSDN检查此示例。

您还需要考虑它是哪种驱动程序,过滤器驱动程序或实际设备驱动程序等。

1)当服务通过 CreateService 和 OpenService 启动驱动程序时,它是调用 DriverEntry 函数还是等到有人用户级应用程序使用驱动程序。

一旦驱动程序被加载,它的DriverEntry例程就会被调用。

2)当我运行应用程序以将驱动程序加载为服务器时,DbgPrintEx 假设在哪里打印 DebugView 或 WinDbg 或其他位置。

当 DebugView 或 WinDbg 均未运行时,输出会丢失并且不会在任何地方打印/记录。

3) 如果我正在使用CreateService我的 sys 文件是否必须在 windows/system32/drivers 文件夹中?我在某处读到 64 位机器 CreateService 仅从系统文件夹加载。

较新的窗口有这种限制。

4)当我将它作为服务启动时,我想在任务管理器上看到它

内核驱动程序未在任务管理器中列出,因为它们实际上是操作系统的一部分,而不是单独的应用程序。但是,如果您有用户级服务,它会在运行时列在任务管理器中。

5)如果调用DriverEntry来初始化驱动程序,是否可以再次调用它还是必须等到它卸载?所以我加载我的驱动程序并忘记优雅地卸载它并再次运行我的程序会调用 DriverEntry 吗?

DriverEntry每次加载驱动程序时调用。如果驱动程序是按需加载的,它将在每次加载/启动驱动程序时运行,即使驱动程序没有正常卸载(例如泄漏内存/锁等)。但是如果驱动程序没有很好地卸载,你可能会导致系统不稳定和蓝屏。

于 2013-11-11T06:46:30.847 回答