Windows驱动程序开发本地调试问题。

Windows驱动程序开发本地调试问题。,windows,debugging,driver,local,Windows,Debugging,Driver,Local,下面是一个场景。 我在windows 8计算机上/也在windows 7计算机上尝试过此功能 我正在使用驱动程序(后视镜驱动程序/远程显示驱动程序)。我应该说,我要开始工作,因为我卡住了 因此,我遵循了KmdfSmall的MSDN示例 我编译了驱动程序代码。远程调试也开始了 我在主机上看不到任何调试消息(我已将寄存器IHVDRIVER设置为0x8) 我还将默认值设置为0xf,以便能够使用DbgPrint 此外,我的真正目标是让我的司机成为一名服务生 我想在本地机器上测试它。我不想有一个要调试

下面是一个场景。 我在windows 8计算机上/也在windows 7计算机上尝试过此功能

我正在使用驱动程序(后视镜驱动程序/远程显示驱动程序)。我应该说,我要开始工作,因为我卡住了

因此,我遵循了KmdfSmall的MSDN示例

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

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

此外,我的真正目标是让我的司机成为一名服务生

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

问题

1) 当服务通过
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