这是一个场景。我在windows 8机器上/也在windows 7机器上尝试过这个。
我正在开发一个驱动程序(镜像驱动/远程显示驱动)。我应该说,我将开始工作,因为我被困住了。
因此,我遵循了MSDN的KmdfSmall示例。
http://msdn.microsoft.com/en-us/library/windows/hardware/hh439665(v=vs.85).aspx
我把司机代码编好了。远程调试也在进行。
我没有在主机上看到任何调试消息(我已经将寄存器IHVDRIVER设置为0x8,我还将默认值设置为0xf,以便能够使用DbgPrint )。
再往前走。我真正的目标是让我的司机成为一名服务
http://www.codeproject.com/Articles/9504/Driver-Development-Part-1-Introduction-to-Drivers
我想在本地机器上测试。我不希望有要调试的目标和主机。普通的老式单机。
问题
1)当服务通过CreateService和OpenService启动驱动程序时,它是调用DriverEntry函数还是等待某个用户级的应用程序使用该驱动程序。
2)当我运行应用程序将驱动程序作为服务器加载时,DbgPrintEx应该在哪里打印DebugView或WinDbg或其他位置。
3)如果我用
CreateService我的sys文件必须在windows/system32 32/drivers文件夹中吗?我在某个地方读到,在64位机器中,CreateService只从系统文件夹加载。
4)当我将它作为一项服务启动时,我应该在任务管理器上看到它吗?
5)如果调用DriverEntry来插入驱动程序,那么它是否可以再次调用,或者必须等到卸载时才调用?所以我加载我的驱动程序,忘记优雅地卸载它并再次运行我的程序,它会调用DriverEntry吗?
我知道这里有很多问题。提前感谢
发布于 2013-11-11 06:46:30
无法使用旧风格的API安装KMDF驱动程序。检查来自MSDN的这个样本。
您还需要考虑它是什么样的驱动程序,过滤器驱动程序或实际的设备驱动程序等等。
1)当服务通过CreateService和OpenService启动驱动程序时,它是调用DriverEntry函数还是等待某个用户级的应用程序使用该驱动程序。
一旦加载了驱动程序,就会调用它的DriverEntry例程。
2)当我运行应用程序将驱动程序作为服务器加载时,DbgPrintEx应该在哪里打印DebugView或WinDbg或其他位置。
当DebugView或WinDbg都没有运行时,输出就会丢失,并且不会在任何地方打印/记录。
3)如果我使用的是
CreateService,我的sys文件是否必须位于windows/system32 32/drivers文件夹中?我在某个地方读到,在64位机器中,CreateService只从系统文件夹加载。
较新的窗口有这样的限制。
4)当我将它作为一项服务启动时,我应该在任务管理器上看到它吗?
内核驱动程序没有在任务管理器中列出,因为它们实际上是OS的一部分,而不是单独的应用程序。但是,如果您有用户级服务,则在运行任务管理器时会将其列在任务管理器中。
5)如果调用DriverEntry来插入驱动程序,那么它是否可以再次调用,或者必须等到卸载时才调用?所以我加载我的驱动程序,忘记优雅地卸载它并再次运行我的程序,它会调用DriverEntry吗?
每次加载驱动程序时都会调用DriverEntry。如果驱动程序是按需加载,它将在每次加载/启动驱动程序时运行,即使驱动程序没有很好地卸载(例如,泄漏内存/锁等)。但是,如果驱动程序不能整齐地卸载,您可能会在不稳定的系统和BSOD中结束。
https://stackoverflow.com/questions/19897770
复制相似问题