From: Ken Spikowski on 21 Apr 2010 11:16 If the flag is 0, Windows XP i386 New Hardware Wizard fails to install the device, and Setupapi.log records: #-035 Processing service Add/Delete section [DriverInstall.Services]. #E275 Error while installing services. Error 0xe0000219: The installation failed because a function driver was not specified for this device instance. #E122 Device install failed. Error 0xe0000219: The installation failed because a function driver was not specified for this device instance. #E154 Class installer failed. Error 0xe0000219: The installation failed because a function driver was not specified for this device instance. Here is the INF file: ; For 32 or 64 bit Windows from XP to Windows 7. Setup File for DATAQ CDC ; Copyright (c) 2010 Dataq Instruments, Inc. [Version] Signature="$Windows NT$" Class=Ports ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} Provider=%DATAQ% CatalogFile=dataq160.cat DriverVer=04/15/2010,1.0.2 [SourceDisksNames] 1=%DriversDisk%,,, [SourceDisksFiles] [Manufacturer] %DATAQ%=DeviceList,NTamd64 [DeviceList] %DATAQ_CDC%=DriverInstall,USB\VID_0683&PID_0160 [DeviceList.NTamd64] %DATAQ_CDC_64BIT%=DriverInstall,USB\VID_0683&PID_0160 [DriverInstall] include=mdmcpq.inf CopyFiles=FakeModemCopyFileSection AddReg=LowerFilterAddReg,SerialPropPageAddReg [DriverInstall.Services] include = mdmcpq.inf AddService = usbser, 0x00000000, LowerFilter_Service_Inst ; This adds the serial port property tab to the device properties dialog [SerialPropPageAddReg] HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" [Strings] DATAQ = "Dataq Instruments, Inc." DriversDisk="DATAQ DI-160 Drivers Disk" DATAQ_CDC = "DATAQ CDC USB to UART" DATAQ_CDC_64BIT = "DATAQ CDC USB to UART 64BIT" Serial.SvcDesc = "USB Serial emulation driver" "Chris" wrote: > I'm not sure I understand. If you're a USB modem, you're a lower > filter to Modem.sys and so the flag should be "2" as you say. If > you're a "COM port", you're simply a function driver for the entire > stack, so the flag should be "0". > > On Apr 20, 8:03 pm, Ken Spikowski > <KenSpikow...(a)discussions.microsoft.com> wrote: > > > If a USB-to-serial CDC ACM specification device using usbser.sys is not > > classified as a modem, the New Hardware Wizard will not install the Virtual > > COM Port unless the INF file AddService directive Flags parameter has a value > > of 2 to set the SPSVCINST_ASSOCSERVICE bit. This causes both ChkInf and the > > DTM "INFTest for a single .INF" to fail with error "(E.22.1302) Filter > > drivers cannot be the controlling service (SPSVCINST_ASSOCSERVICE)." To > > certifiy the driver for a device that otherwise passes WINQUAL testing but is > > less complicated than a modem, is there any other way besides misclassifying > > it as a modem or writing a custom driver? > > . >
From: Chris on 21 Apr 2010 11:51 On Apr 21, 10:16 am, Ken Spikowski <KenSpikow...(a)discussions.microsoft.com> wrote: > If the flag is 0, Windows XP i386 New Hardware Wizard fails to install the > device, and Setupapi.log records: Sorry, sorry, I got that backwards (it's been awhile). "2" is a function driver and "0" is a filter driver. So "2" is what you want. Which really leads to your real problem: you're trying to install usbser as a lower filter on a Ports stack, and there is no function driver. Note from your INF: AddReg=LowerFilterAddReg,SerialPropPageAddReg [DriverInstall.Services] include = mdmcpq.inf AddService = usbser, 0x00000000, LowerFilter_Service_Inst You need to install it as the standalone driver. Try something like this: [DriverInstall.nt.Services] include=mdmcpq.inf AddService=usbser, 0x00000002, DriverService [DriverService] include=mdmcpq.inf DisplayName=%Serial.SvcDesc% ServiceType=1 StartType=3 ErrorControl=1 ServiceBinary=%12%\usbser.sys
From: Ken Spikowski on 21 Apr 2010 16:43 After making your suggested changes, Chkinf still failed with two errors. The value of 2 for the flags parameter still resulted in error "(E.22.1302) Filter drivers cannot be the controlling service (SPSVCINST_ASSOCSERVICE).", so I changed it back to 0. I also found it necessary to remove the ".nt" from the [DriverInstall.Services] section heading. However, with those changes the device will not install. "Chris" wrote: > On Apr 21, 10:16 am, Ken Spikowski > <KenSpikow...(a)discussions.microsoft.com> wrote: > > > If the flag is 0, Windows XP i386 New Hardware Wizard fails to install the > > device, and Setupapi.log records: > > Sorry, sorry, I got that backwards (it's been awhile). "2" is a > function driver and "0" is a filter driver. So "2" is what you want. > > Which really leads to your real problem: you're trying to install > usbser as a lower filter on a Ports stack, and there is no function > driver. Note from your INF: > > AddReg=LowerFilterAddReg,SerialPropPageAddReg > > [DriverInstall.Services] > include = mdmcpq.inf > AddService = usbser, 0x00000000, LowerFilter_Service_Inst > > You need to install it as the standalone driver. Try something like > this: > > [DriverInstall.nt.Services] > include=mdmcpq.inf > AddService=usbser, 0x00000002, DriverService > > [DriverService] > include=mdmcpq.inf > DisplayName=%Serial.SvcDesc% > ServiceType=1 > StartType=3 > ErrorControl=1 > ServiceBinary=%12%\usbser.sys > . >
From: Chris on 21 Apr 2010 17:52 Note that I said "try something like this", not "this exact text will cure your problem". There are plenty of usbser COM port INF's floating around the net, so I suggest you copy one of those. For example there is one in here: http://www.st.com/stonline/books/pdf/docs/12571.pdf Or here: http://www.lvr.com/files/usbcomport.txt On Apr 21, 3:43 pm, Ken Spikowski <KenSpikow...(a)discussions.microsoft.com> wrote: > After making your suggested changes, Chkinf still failed with two errors. The > value of 2 for the flags parameter still resulted in error "(E.22.1302) > Filter > drivers cannot be the controlling service (SPSVCINST_ASSOCSERVICE).", so I > changed it back to 0. I also found it necessary to remove the ".nt" from the > [DriverInstall.Services] section heading. However, with those changes the > device will not install.
From: Ken Spikowski on 21 Apr 2010 19:05
Thank you for the suggestions. We came up with the following, which uses a value of 2 for flags, passes ChkInf, and installs on both i386 and amd64 systems: ; For 32 or 64 bit Windows from XP to Windows 7. Setup File for DATAQ CDC ; Copyright (c) 2010 Dataq Instruments, Inc. [Version] Signature="$Windows NT$" Class=Ports ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} Provider=%PRVDR% CatalogFile=dataq160.cat DriverVer=04/21/2010,1.0.3 [SourceDisksNames] 1=%DriversDisk%,,, [SourceDisksFiles] [Manufacturer] %MFGNAME%=VirComDevice,NT,NTamd64 [DestinationDirs] DefaultDestDir = 12 [VirComDevice.NT] %DESCRIPTION%=DriverInstall,USB\VID_0683&PID_0160 [VirComDevice.NTamd64] %DESCRIPTION%=DriverInstall,USB\VID_0683&PID_0160 [DriverInstall.NT] Include=mdmcpq.inf CopyFiles=FakeModemCopyFileSection AddReg=DriverInstall.NT.AddReg [DriverInstall.NT.AddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,usbser.sys HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" [DriverInstall.NT.Services] AddService=usbser, 0x00000002, DriverServiceInst [DriverServiceInst] DisplayName=%SERVICE% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary= %12%\usbser.sys LoadOrderGroup = Base [Strings] PRVDR = "DATAQ" MFGNAME = "DATAQ Instruments, Inc." DESCRIPTION = "DATAQ USB CDC" SERVICE = "DATAQ USB CDC driver" DriversDisk = "DATAQ DI-160 Drivers Disk" "Chris" wrote: > Note that I said "try something like this", not "this exact text will > cure your problem". There are plenty of usbser COM port INF's > floating around the net, so I suggest you copy one of those. For > example there is one in here: > > http://www.st.com/stonline/books/pdf/docs/12571.pdf > > Or here: > > http://www.lvr.com/files/usbcomport.txt > > On Apr 21, 3:43 pm, Ken Spikowski > <KenSpikow...(a)discussions.microsoft.com> wrote: > > > After making your suggested changes, Chkinf still failed with two errors. The > > value of 2 for the flags parameter still resulted in error "(E.22.1302) > > Filter > > drivers cannot be the controlling service (SPSVCINST_ASSOCSERVICE).", so I > > changed it back to 0. I also found it necessary to remove the ".nt" from the > > [DriverInstall.Services] section heading. However, with those changes the > > device will not install. > . > |