하드웨어를 터치하지 않는 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"
해결책
자기 답변 :
INF를 다음을 포함하도록 변경했습니다.
mfg0] %devicedesc %= mydevice_ddi, *mydevice ipm1
" IPM1"은 새롭고 내 눈에는 약간의 부두가 있습니다. Chris Cant의 "Wording Windows WDM 장치 드리스"의 예에서 얻었습니다.
큰 변화는 제어판에서 "새 하드웨어 추가"마법사를 사용하여 드라이버를 설치하는 것입니다. INF를 마우스 오른쪽 버튼으로 클릭하면 충분하지 않습니다. 그 이유는 운전자가 제어 할 하드웨어를 올바르게 찾지 못하는 PNP 관리자를 호출하기 때문입니다.
제휴하지 않습니다 StackOverflow