如何开发不触及硬件的Windows驱动程序?

Cla*_*lay 6 windows wdk inf

我需要创建一个模拟不存在的设备的WDM驱动程序.驾驶员需要在O/S靴,打开和关闭通过要被加载SetupDiXXXCreateFile,需要响应DeviceIoControl,等等.

我有驱动程序编码,但XP拒绝加载它.系统事件查看器说:

由于以下错误,MyDevice服务无法启动:无法启动该服务,因为它已被禁用或因为它没有与之关联的已启用设备.

鉴于此,我认为问题出在INF文件中(参见下文).是吗?我该怎么办呢?

;; MyDevice.inf

[Version]
Signature="$Windows 95$"

Class=MyDeviceDeviceClass
ClassGUID={ff646f80-8def-11d2-9449-00105a075f6b}
Provider=%ProviderName%
DriverVer= 12/21/2009,1.0.0.1

[ClassInstall32]
Addreg=Class_AddReg

[Class_AddReg]
HKR,,,,%DeviceClassName%
HKR,,Icon,,"-18"

[DestinationDirs]
MyDevice_Files_Driver = 10,System32\Drivers


[Manufacturer]
%MfgName%=Mfg0

[Mfg0]
%DeviceDesc%=MyDevice_DDI, *MyDevice


[MyDevice_DDI]
CopyFiles=MyDevice_Files_Driver
AddReg=MyDevice_9X_AddReg


[MyDevice_DDI.NT]
CopyFiles=MyDevice_Files_Driver
AddReg=MyDevice_NT_AddReg

[MyDevice_DDI.NT.Services]
Addservice = MyDevice, 0x00000002, MyDevice_AddService

[MyDevice_AddService]
DisplayName    = %SvcDesc%
ServiceType    = 1
StartType      = 3
ErrorControl   = 1
ServiceBinary  = %10%\System32\Drivers\MyDevice.sys

[MyDevice_NT_AddReg]
HKLM, "System\CurrentControlSet\Services\MyDevice\Parameters","BreakOnEntry", 0x00010001, 0

[MyDevice_Files_Driver]
MyDevice.sys


[Strings]
ProviderName="Acme"
MfgName="Acme"
DeviceDesc="Acme"
DeviceClassName="Device class for MyDevice"
SvcDesc="MyDevice NT service"

Cla*_*lay 4

自我回答:

我更改了 INF 以包含以下内容:

[Mfg0] %DeviceDesc%=MyDevice_DDI, *MyDevice\ipm1

“\ipm1”是新的,在我眼里有点巫术。我从 Chris Cant 的“Writing Windows WDM Device Drvers”中的一个示例中得到了它。

最大的变化是使用控制面板中的“添加新硬件”向导来安装驱动程序。右键单击安装 INF 是不够的。我怀疑原因是它调用了 PnP 管理器,而该管理器正确地未能找到驱动程序要控制的硬件。