以下是该方案。 我在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
我想在LOCAL机器上测试它。我不想让目标和主机进行调试。普通oldschool单机。
问题
1)当服务通过CreateService
和OpenService
启动驱动程序时,它是否会调用DriverEntry函数或者等到某个用户级应用程序使用该驱动程序。
2)当我运行应用程序以将驱动程序加载为DbgPrintEx
假设打印的服务器时
DebugView或WinDbg或其他地方。
3)如果我正在使用
CreateService
我的sys文件必须在windows / system32 / drivers文件夹中吗?我在64位机器CreateService
只能从系统文件夹加载。
4)当我把它作为服务启动时,我想在任务管理器上看到它
5)如果调用DriverEntry
来初始化驱动程序,可以再次调用它还是必须等到它卸载?所以我加载了我的驱动程序并忘记优雅地卸载它并再次运行我的程序它会调用DriverEntry
吗?
我知道这里有很多问题。提前致谢
答案 0 :(得分:2)
无法使用旧式API安装KMDF驱动程序。从MSDN检查this sample。
您还需要考虑它是什么类型的驱动程序,过滤驱动程序或实际设备驱动程序等。
1)当服务通过CreateService和OpenService启动驱动程序时, 它会调用DriverEntry函数还是等到有人 用户级应用程序使用驱动程序。
加载驱动程序后,将调用其DriverEntry
例程。
2)当我运行应用程序加载驱动程序作为服务器在哪里 DbgPrintEx假设打印DebugView或WinDbg或其他地方。
当DebugView或WinDbg都没有运行时,输出会丢失,不会在任何地方打印/记录。
3)如果我使用
CreateService
我的sys文件必须在windows / system32 / drivers中 文件夹?我在64位机器CreateService中读到了某个地方 从系统文件夹加载。
较新的窗口有这种限制。
4)当我把它作为服务启动时,我想在任务上看到它 管理器
内核驱动程序未列在任务管理器中,因为它们实际上是操作系统的一部分,而不是单独的应用程序。但是,如果您具有用户级服务,则它将在运行时列在任务管理器中。
每次加载驱动程序时都会调用5)如果调用DriverEntry来初始化驱动程序,可以再次调用它 它必须等到它卸载?所以我加载我的驱动程序而忘了 优雅地卸载它并再次运行我的程序它会调用DriverEntry吗?
DriverEntry
。如果驱动程序是需求加载,则每次加载/启动驱动程序时它都会运行,即使驱动程序没有正常卸载(例如泄漏内存/锁等)。但是如果驱动程序没有整齐地卸载,你可能会陷入不稳定的系统和BSOD。