Hello,
I was wondering if anyone can point me toward resolving a problem I’m having with a coinstaller that won’t load on XP?
I’ve inherited a project that had been used to distribute a driver for a pci card – a simple IO board not conforming to any of the pre-defined classes – where the installer had been working on XP. The intent is to get the driver and installer working on Vista and Win 7. Though the driver works on all 3, and installs on Vista & Win7, the installation fails on XP. The specific nature of the failure is the call to SetupDiCallClassInstaller:
Windows could not load the installer for
SetupDiCallClassInstaller(DIF_REGISTERDEVICE): ERROR_INVALID_CLASS_INSTALLER
I built the installer using wdk version 6001.18001 and the wix 2.0 toolkit, specifying w2k and xp environments. I built this on both xp and win7. I thought that possibly the reason it would install on Win7 & not xp would be a dependency on a system DLL that would not have the entry points on xp that would be present on Win7.
I’ve looked through the class and device dll’s. They export, seemingly, symbols of the correct name (matching the inf file content) and signature. I can LoadLibrary both DLL’s. ChkInf issued warnings about an unknown guid and a few others that looked inconsequential…
• Line 13 : (W22.1.2202) Unrecognized directive: DriverPackageType
• Line 14 : (W22.1.2202) Unrecognized directive: DriverPackageDisplayName
• Line 54 : (W22.1.2202) Unrecognized directive: FRIENDLYNAMEFORMAT
• Line 57 : (W22.1.2034) No destination dir was defined for this section. Your driver is being copied to the DefaultDestDir location specified (10,System32\Drivers).
It looks like both the inf file and the coinstaller dll’s are copy / paste / edited from the ddk toast sample.
I know I’m overlooking something simple, since the installer works elsewhere, but…
Here’s the inf file (with stuff blanked out, cuz TPTB are paranoid)
[Version]
Signature=“$Windows NT$”
Class=“CompanyXYZ PCI vvvv Interfaces”
ClassGuid={a valid guid}
Provider=%CompanyXYZ%
DriverPackageType=PlugAndPlay
DriverPackageDisplayName=“xxxxx/xxxxx/xxxxx PCI/PCI Express/iiii”
DriverVer=02/27/2008,1.2.0.0
CatalogFile=xxxxxx.cat
[DestinationDirs]
DefaultDestDir=10,System32\Drivers
CoInstaller_CopyFiles = 11
CompanyXYZCls1InstallerCopyFiles = 11
;
; Class section
;
[ClassInstall32]
AddReg=CompanyXYZcls1.addreg32
CopyFiles=CompanyXYZCls1InstallerCopyFiles
[CompanyXYZcls1.addreg32]
HKR,Installer32,CompanyXYZcls1.dll,ClassInstall
HKR,EnumPropPages32,tgpibpp1.dll
HKR,Icon,5001
[CompanyXYZCls1InstallerCopyFiles]
CompanyXYZcls1.dll
;tgpibpp1.dll
;
; CompanyXYZ Device Install Section
;
[Manufacturer]
%CompanyXYZ% = CompanyXYZ
[CompanyXYZ]
%CompanyXYZ.DeviceDesc% = xxxxxx,PCI\VEN_xxxx&DEV_yyyy
[xxxxxx.NT]
CopyFiles=xxxxxx.NT.Copy
FriendlyNameFormat=%FriendlyNameFormat%
[xxxxxx.NT.Copy]
xxxxxx.sys
[xxxxxx.NT.HW]
AddReg=xxxxxx.NT.HW.AddReg
[xxxxxx.NT.HW.AddReg]
HKR,DevLoader,*ntkern
HKR,NTMPDriver,xxxxxx.sys
;
;Service installation
;
[xxxxxx.NT.Services]
AddService = xxxxxx, 2, xxxxxx.Service
[xxxxxx.Service]
DisplayName = %xxxxxx.ServiceName%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\xxxxxx.sys
;
;Coinstaller installation
;
[xxxxxx.NT.CoInstallers]
AddReg=CoInstaller_AddReg
CopyFiles=CoInstaller_CopyFiles
[CoInstaller_CopyFiles]
CompanyXYZco1.dll
xxxxxpp1.dll
[CoInstaller_AddReg]
HKR,CoInstallers32,0x00010000,“CompanyXYZco1.dll,CompanyXYZCoInstaller”
[CompanyXYZCoInfo]
; Used by the CompanyXYZ co-installer to figure out where the original media is
; located (so it can launch value-added setup programs)
OriginalInfSourcePath = %1%
[SourceDisksNames.x86]
1 = %CompanyXYZSetupDisk%,
[SourceDisksFiles]
xxxxxx.sys = 1,
CompanyXYZco1.dll = 1,
CompanyXYZcls1.dll = 1,
xxxxxpp1.dll = 1,
;
;Strings
;
[Strings]
CompanyXYZ.DeviceDesc = “CompanyXYZ xxxxx/yyyyy/zzzzz PCI/PCI Express/iiii Interface”
CompanyXYZ=“A company name.”
ClassName = “CompanyXYZ iiii Interfaces”
t61488.ServiceName=“xxxxxx”
CompanyXYZSetupDisk=“xxxxxx Setup Disk”
FriendlyNameFormat = “CompanyXYZ xxxx/yyyy/zzzz PCI/PCI Express/iiii %1!u!”
SPSVCINST_ASSOCSERVICE=0x00000002
COPYFLG_NOSKIP=2
SERVICE_KERNEL_DRIVER=1
SERVICE_AUTO_START=2
SERVICE_DEMAND_START=3
SERVICE_ERROR_NORMAL=1
Thanks,
Thanks,