Как я могу разработать драйвер для Windows, который не касается оборудования?

Мне нужно создать драйвер WDM, который имитирует устройство, которого нет. Драйвер должен быть загружен, когда O / S загружается, открывается и закрывается через SetupDiXXX и CreateFile, должен отвечать на 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"

person Clay    schedule 22.12.2009    source источник
comment
Я не знаю ответа, но такие проекты, как эмулятор нуль-модема (com0com.sourceforge.net) указывают, что это возможно. Возможно, вам удастся что-нибудь почерпнуть, просмотрев этот проект?   -  person Judge Maygarden    schedule 22.12.2009
comment
Драйвер com0com близок к тому, что мне было нужно, но не на 100% от решения: мне также пришлось установить драйвер из панели управления «Добавить новое оборудование». Просто щелкнуть правой кнопкой мыши, чтобы установить INF.   -  person Clay    schedule 22.12.2009


Ответы (1)


Сам ответил:

Я изменил INF, включив в него следующее:

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

"\ Ipm1" новый и немного вуду в моих глазах. Я получил это из примера в книге Криса Кэнта «Написание драйверов устройств Windows WDM».

Большое изменение заключается в использовании мастера «Добавить новое оборудование» из панели управления для установки драйвера. Щелкните правой кнопкой мыши для установки INF. Я подозреваю, что причина в том, что он вызывает диспетчер PnP, который правильно не может найти оборудование для управления драйвером.

person Clay    schedule 22.12.2009