Como posso desenvolver driver do Windows que não toque em hardware?
Pergunta
Preciso criar um driver WDM que emula um dispositivo que não está presente. O motorista precisa ser carregado quando as botas O/S, abertas e fechadas via SetupDiXXX
e CreateFile
, precisa responder a DeviceIoControl
, etc.
Eu tenho o driver codificado, mas o XP se recusa a carregá -lo. O Visualizador de Eventos do Sistema diz:
O serviço MyDevice falhou ao iniciar devido ao seguinte erro: o serviço não pode ser iniciado, porque está desativado ou porque não possui dispositivos habilitados associados a ele.
Dado isso, acho que o problema está no arquivo INF (referência abaixo). É isso? Como devo consertar isso?
;; 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"
Solução
Auto -respondido:
Eu mudei o inf para incluir o seguinte:
Mfg0] %deviceSc %= mydevice_ddi, *myDevice ipm1
O " ipm1" é novo e um pouco de vodu aos meus olhos. Recebi isso de um exemplo em "Window Windows WDM Disposited Dvers", de Chris Cant.
A grande mudança é usar o assistente "Adicionar novo hardware" no painel de controle para instalar o driver. Clique com o botão direito do mouse na instalação do INF não é suficiente. Suspeito que o motivo seja que ele invoca o gerente do PNP, que não encontra corretamente o hardware para o controle do driver.