|
|
|
|
Конкретно, речь о драйверах FT232R (но, полагаю, подойдёт и для других). Как сделать, что б в секции [FtdiPort.NT.HW.AddReg] файла ftdiport.inf, можно было загружать разный HKR,,"ConfigData", в зависимости от комбинации VID-PID? [Version] Signature="$Windows NT$" DriverPackageType=PlugAndPlay DriverPackageDisplayName=%DESC% Class=Ports ClassGUID={4d36e978-e325-11ce-bfc1-08002be10318} Provider=%FTDI% CatalogFile=ftdiport.cat DriverVer=04/10/2012,2.08.24 [SourceDisksNames] 1=%DriversDisk%,,, [SourceDisksFiles] ftser2k.sys=1,i386 ftserui2.dll=1,i386 ftcserco.dll = 1,i386 [SourceDisksFiles.amd64] ftser2k.sys=1,amd64 ftserui2.dll=1,amd64 ftcserco.dll = 1,amd64 [DestinationDirs] FtdiPort.NT.Copy=10,system32\drivers FtdiPort.NT.CopyUI=10,system32 FtdiPort.NT.CopyCoInst=10,system32 [ControlFlags] ExcludeFromSelect=* [Manufacturer] %FTDI%=FtdiHw,NTamd64 [FtdiHw] %VID_0403&PID_6001.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_6001 %VID_0403&PID_6010.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_6010 %VID_0403&PID_6011.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_6011 %VID_0403&PID_6014.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_6014 %VID_0403&PID_6015.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_6015 [FtdiHw.NTamd64] %VID_0403&PID_6001.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6001 %VID_0403&PID_6010.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6010 %VID_0403&PID_6011.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6011 %VID_0403&PID_6014.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6014 %VID_0403&PID_6015.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6015 [FtdiPort.NT.AddService] DisplayName = %SvcDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%\system32\drivers\ftser2k.sys LoadOrderGroup = Base ; -------------- Serenum Driver install section [SerEnum_AddService] DisplayName = %SerEnum.SvcDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %12%\serenum.sys LoadOrderGroup = PNP Filter [FtdiPort.NT.AddReg] HKR,,EnumPropPages32,,"ftserui2.dll,SerialPortPropPageProvider" [FtdiPort.NT.Copy] ftser2k.sys [FtdiPort.NT.CopyUI] ftserui2.dll [FtdiPort.NT.CopyCoInst] ftcserco.dll [FtdiPort.NT] CopyFiles=FtdiPort.NT.Copy,FtdiPort.NT.CopyUI AddReg=FtdiPort.NT.AddReg [FtdiPort.NTamd64] CopyFiles=FtdiPort.NT.Copy,FtdiPort.NT.CopyUI AddReg=FtdiPort.NT.AddReg [FtdiPort.NT.HW] AddReg=FtdiPort.NT.HW.AddReg [FtdiPort.NTamd64.HW] AddReg=FtdiPort.NT.HW.AddReg [FtdiPort.NT.Services] AddService = FTSER2K, 0x00000002, FtdiPort.NT.AddService AddService = Serenum,,SerEnum_AddService DelService = FTSERIAL [FtdiPort.NTamd64.Services] AddService = FTSER2K, 0x00000002, FtdiPort.NT.AddService AddService = Serenum,,SerEnum_AddService DelService = FTSERIAL [FtdiPort.NT.HW.AddReg] HKR,,"UpperFilters",0x00010000,"serenum" HKR,,"ConfigData",1,11,00,3F,3F,10,27,00,00,88,13,00,00,C4,09,00,00,E2,04,00,00,71,02,00,00,38,41,00,00,9C,80,00,00,4E,C0,00,00,34,00,00,00,1A,00,00,00,0D,00,00,00,06,40,00,00,03,80,00,00,00,00,00,00,D0,80,00,00 HKR,,"MinReadTimeout",0x00010001,0 HKR,,"MinWriteTimeout",0x00010001,0 HKR,,"LatencyTimer",0x00010001,16 [FtdiPort.NT.CoInstallers] AddReg=FtdiPort.NT.CoInstallers.AddReg CopyFiles=FtdiPort.NT.CopyCoInst [FtdiPort.NTamd64.CoInstallers] AddReg=FtdiPort.NT.CoInstallers.AddReg CopyFiles=FtdiPort.NT.CopyCoInst [FtdiPort.NT.CoInstallers.AddReg] HKR,,CoInstallers32,0x00010000,"ftcserco.Dll,FTCSERCoInstaller" ;---------------------------------------------------------------; [Strings] FTDI="FTDI" DESC="CDM Driver Package - VCP Driver" DriversDisk="FTDI USB Drivers Disk" PortsClassName = "Ports (COM & LPT)" VID_0403&PID_6001.DeviceDesc="USB Serial Port" VID_0403&PID_6010.DeviceDesc="USB Serial Port" VID_0403&PID_6011.DeviceDesc="USB Serial Port" VID_0403&PID_6014.DeviceDesc="USB Serial Port" VID_0403&PID_6015.DeviceDesc="USB Serial Port" SvcDesc="USB Serial Port Driver" SerEnum.SvcDesc="Serenum Filter Driver" |
|
|
Что конкретно нужно сделать? Записывать разные ConfigData в зависимости от VID/PID? В секцию FtdiHw прописываем свой девайс по аналогии с имеющимися, только вместо FtdiPort.NT указываем свою DDI секцию. Что-то вроде такого: [FtdiHw] %VID_0100&PID_0500.DeviceDesc%=FtdiPort2.NT,FTDIBUS\COMPORT&VID_0100&PID_0500 [FtdiHw.NTamd64] %VID_0100&PID_0500.DeviceDesc%=FtdiPort2.NTamd64,FTDIBUS\COMPORT&VID_0100&PID_0500 [FtdiPort2.NT] CopyFiles=FtdiPort.NT.Copy,FtdiPort.NT.CopyUI AddReg=FtdiPort.NT.AddReg [FtdiPort2.NTamd64] CopyFiles=FtdiPort.NT.Copy,FtdiPort.NT.CopyUI AddReg=FtdiPort.NT.AddReg [FtdiPort2.NT.HW] AddReg=FtdiPort2.NT.HW.AddReg [FtdiPort2.NTamd64.HW] AddReg=FtdiPort2.NT.HW.AddReg [FtdiPort2.NT.Services] AddService = FTSER2K, 0x00000002, FtdiPort.NT.AddService AddService = Serenum,,SerEnum_AddService DelService = FTSERIAL [FtdiPort2.NTamd64.Services] AddService = FTSER2K, 0x00000002, FtdiPort.NT.AddService AddService = Serenum,,SerEnum_AddService DelService = FTSERIAL [FtdiPort2.NT.HW.AddReg] HKR,,"UpperFilters",0x00010000,"serenum" HKR,,"ConfigData",1,11,00,3F,3F,10,27,00,00,88,13,00,00,C4,09,00,00,E2,04,00,00,71,02,00,00,38,41,00,00,9C,80,00,00,4E,C0,00,00,34,00,00,00,1A,00,00,00,0D,00,00,00,06,40,00,00,03,80,00,00,00,00,00,00,D0,80,00,00 HKR,,"MinReadTimeout",0x00010001,0 HKR,,"MinWriteTimeout",0x00010001,0 HKR,,"LatencyTimer",0x00010001,16 [FtdiPort2.NT.CoInstallers] AddReg=FtdiPort.NT.CoInstallers.AddReg CopyFiles=FtdiPort.NT.CopyCoInst [FtdiPort2.NTamd64.CoInstallers] AddReg=FtdiPort.NT.CoInstallers.AddReg CopyFiles=FtdiPort.NT.CopyCoInst [Strings] VID_0100&PID_0500.DeviceDesc="My Super Port" Только придется пересоздать и подписать cat файл. Подписывать, я так понимаю, у вас нечем?
|
|
|
E.S,: Что конкретно нужно сделать? Нужно, что бы в зависимости от VID/PID, параметр HKR,,"ConfigData",1,11,00,3F,3F,10,27,00,00,88,13,00,00,C4,09,00,00,E2,04,00,00,71,02,00,00,38,41,00,00,9C,80,00,00,4E,C0,00,00,34,00,00,00,1A,00,00,00,0D,00,00,00,06,40,00,00,03,80,00,00,00,00,00,00,D0,80,00,00 изменялся. |
|
|
не понял чем плох рa одной драйвер
|
|
|
Gregory: Нужно, что бы в зависимости от VID/PID, параметр HKR,,"ConfigData",1,11,00,3F,3F,10,27,00,00,88,13,00,00,C4,09,00,00,E2,04,00,00,71,02,00,00,38,41,00,00,9C,80,00,00,4E,C0,00,00,34,00,00,00,1A,00,00,00,0D,00,00,00,06,40,00,00,03,80,00,00,00,00,00,00,D0,80,00,00 изменялся. Тогда нужно добавить в INF то, что я написал.Какие Винды должны поддерживаться? |
|
|
E.S,: Тогда нужно добавить в INF то, что я написал Так что-то не пойму, а где альтернативный параметр? E.S,: Только придется пересоздать и подписать cat файл. А почему такие сложности? И до такого я ещё не "дорос". Может я плохо объяснил? Попробую ещё раз: Делаю ещё один девайс, и назначаю ему, PID, скажем, 6500. Добавляю в inf соответствующие строки в секции: [FtdiHw], [FtdiHw.NTamd64] и [Strings] Теперь мне надо, что б для девайса с PID=6500 бралась модифицированная строка HKR,,"ConfigData",1,11,00,3F,3F,10,27,00,00,88,13,00,00,C4,09,00,00,E2,04,00,00,71,02,00,00,38,41,00,00,9C,80,00,00,4E,C0,00,00,34,00,00,00,1A,00,00,00,0D,00,00,00,06,40,00,00,03,80,00,00,00,00,00,00,D0,80,00,00 а для всех остальных - "штатная" |
|
|
Gregory: Делаю ещё один девайс, и назначаю ему, PID, скажем, 6500. Добавляю в inf соответствующие строки в секции: [FtdiHw], [FtdiHw.NTamd64] и [Strings] Теперь мне надо, что б для девайса с PID=6500 бралась модифицированная строка HKR,,"ConfigData",1,11,00,3F,3F,10,27,00,00,88,13,00,00,C4,09,00,00,E2,04,00,00,71,02,00,00,38,41,00,00,9C,80,00,00,4E,C0,00,00,34,00,00,00,1A,00,00,00,0D,00,00,00,06,40,00,00,03,80,00,00,00,00,00,00,D0,80,00,00 а для всех остальных - "штатная" В моем примере VID=100, PID=500, строку для этого девайса нужно прописать в секцию [FtdiPort2.NT.HW.AddReg], для остальных - в [FtdiPort.NT.HW.AddReg]Gregory: А почему такие сложности? И до такого я ещё не "дорос". Винда x64 не загрузит неподписанный драйвер без помощи бубна. x86 - ругнется, но загрузит. Для подписывания нужно получить сертификат, а он стоит денег и частным лицам их не особо охотно выдают.
|
|
|
E.S,: В моем примере VID=100, PID=500, строку для этого девайса нужно прописать в секцию [FtdiPort2.NT.HW.AddReg], для остальных - в [FtdiPort.NT.HW.AddReg] Кажись, "дошло", наконец. Буду пробовать. Кстати, предлагали вариант: создать отдельный inf. Так понимаю, примерно то же (по объёму). А имеет значение как располагать пункты оригинальные и с цифрой 2? Т.е. сперва все оригинальные, затем - 2, или можно вперемежку? E.S,: Винда x64 не загрузит неподписанный драйвер без помощи бубна. x86 - ругнется, но загрузит. Ни разу с x64 так не "попадал". Наверное, драйвера все были подписаны, да и пользовался x64, откровенно говоря, довольно мало. А есть какой способ это "обойти"? P.S.: Я правильно понял, что драйвер становится "не подписанным", при любом изменении в inf? |
|
|
Gregory: А есть какой способ это "обойти"? Переключить систему в тестовый режим. Я ставил так не подписанный драйвер на 7-ю винду х64 для доступа к портам из своей программы. Писал тут на форуме. Как переключить в тестовый режим |
|
|
Gregory: А имеет значение как располагать пункты оригинальные и с цифрой 2? Т.е. сперва все оригинальные, затем - 2, или можно вперемежку? Без разницы.Gregory: Кстати, предлагали вариант: создать отдельный inf. Так понимаю, примерно то же (по объёму). С отдельным inf проще. Нужно просто прописать в каждом свои настройки и убрать лишние VID/PID, но с подписыванием будут те же проблемы + лишний inf.Gregory: А есть какой способ это "обойти"? P.S.: Я правильно понял, что драйвер становится "не подписанным", при любом изменении в inf? В целом - да, любое изменение делает подпись inf-файла невалидной. Но там не все так просто. К примеру, на неподписанные user-mode драйвера Винда ругается, но устанавливает. В данном же случае у sys-файла наверняка есть валидная подпись, поэтому стоит попробовать, мало ли.Арс: Переключить систему в тестовый режим. Я ставил так не подписанный драйвер на 7-ю винду х64 для доступа к портам из своей программы. Писал тут на форуме. Так это и есть бубен Загружаться так придется постоянно, т.к. даже если неподписанный драйвер установлен, Винда его загрузит только в отладочном режиме.
|
|
|
|
|