Windows驱动程序开发本地调试问题。
下面是一个场景。 我在windows 8计算机上/也在windows 7计算机上尝试过此功能 我正在使用驱动程序(后视镜驱动程序/远程显示驱动程序)。我应该说,我要开始工作,因为我卡住了 因此,我遵循了KmdfSmall的MSDN示例 我编译了驱动程序代码。远程调试也开始了 我在主机上看不到任何调试消息(我已将寄存器IHVDRIVER设置为0x8) 我还将默认值设置为0xf,以便能够使用DbgPrint 此外,我的真正目标是让我的司机成为一名服务生 我想在本地机器上测试它。我不想有一个要调试的目标和主机。普通的老式单机 问题 1) 当服务通过Windows驱动程序开发本地调试问题。,windows,debugging,driver,local,Windows,Debugging,Driver,Local,下面是一个场景。 我在windows 8计算机上/也在windows 7计算机上尝试过此功能 我正在使用驱动程序(后视镜驱动程序/远程显示驱动程序)。我应该说,我要开始工作,因为我卡住了 因此,我遵循了KmdfSmall的MSDN示例 我编译了驱动程序代码。远程调试也开始了 我在主机上看不到任何调试消息(我已将寄存器IHVDRIVER设置为0x8) 我还将默认值设置为0xf,以便能够使用DbgPrint 此外,我的真正目标是让我的司机成为一名服务生 我想在本地机器上测试它。我不想有一个要调试
CreateService
和OpenService
启动驱动程序时,它是调用DriverEntry功能还是等待用户级应用程序使用驱动程序
2) 当我运行应用程序将驱动程序作为服务器加载时,DbgPrintEx
将在哪里打印
DebugView或WinDbg或其他位置
3) 如果我正在使用
CreateService
我的sys文件是否必须位于windows/system32/drivers文件夹中?我在某个地方读到,在64位机器CreateService
中,仅从系统文件夹加载
4) 当我将其作为服务启动时,我是否应该在任务管理器上看到它
5) 如果调用DriverEntry
初始化驱动程序,是否可以再次调用它,或者它必须等待卸载?所以我加载了我的驱动程序,忘记了优雅地卸载它,然后再次运行我的程序,它会调用DriverEntry
我知道这里有很多问题。提前感谢无法使用旧式API安装KMDF驱动程序。从MSDN检查 您还需要考虑它是什么类型的驱动程序,过滤驱动程序还是实际的设备驱动程序等等 1) 当服务通过CreateService和OpenService启动驱动程序时, 它是调用DriverEntry函数还是等到有人 用户级应用程序使用驱动程序 一旦加载驱动程序,就会调用其
DriverEntry
例程
2) 当我运行应用程序将驱动程序作为服务器加载时
DbgPrintEx假设打印DebugView或WinDbg或其他位置
当DebugView或WinDbg均未运行时,输出将丢失,并且不会在任何地方打印/记录
3) 如果我使用的是CreateService
,我的sys文件是否必须在windows/system32/drivers中
文件夹?我在某个地方读到,仅在64位机器上创建服务
从系统文件夹加载
较新的windows有这样的限制
4) 当我把它作为一项服务启动时,我会在任务中看到它吗
经理
内核驱动程序没有列在任务管理器中,因为它们实际上是操作系统的一部分,而不是单独的应用程序。但是,如果您有用户级服务,它将在运行时列在任务管理器中
5) 如果调用DriverEntry初始化驱动程序,是否可以再次调用它
它必须等到卸载后才可以使用?所以我装上我的司机,忘了开车
优雅地卸载它并再次运行我的程序它会调用DriverEntry吗
每次加载驱动程序时都会调用DriverEntry。如果驱动程序是按需加载的,它将在每次加载/启动驱动程序时运行,即使驱动程序没有正常卸载(例如内存/锁泄漏等)。但若司机并没有整齐地卸货,你们可能会陷入不稳定的系统和BSOD