Coinstaller file confusion

I am new to driver development and have a question about co-installers. A real quick blurb about the background for this question. Microsoft put out a document (DEVFUND–0046) that requires certain device drivers to provide a utility(ies) for manipulating the device on Server Core installations. The confusion I am having is with one of the requirements that was listed in the document:

–The utility should not be installed by INF

It is unclear to me how I am supposed to get the utility onto the system since it appears I can’t use the INF, which is intended for this purpose. It also doesn’t make sense to use a Windows installer since there is no GUI on a Core installation. Is there a way in the code of the coinstaller to determine what the installation source is so that I can programatically copy the files over? Or better yet, has anyone had to comply with this document and is more clear on the requirements (frankly, it is a VERY poorly written document for one that is so important since it will lead to failing WLK submissions if the requirements of the document are not met)? Again, I am new to this stuff and may be missing something very obvious, but I believe I have confused myself sufficiently enough to ask for a little guidance. Thanks in advance and I am happy to answer any clarification questions you may have.

Turns out there is an example in the DDK documentation under the Toaster package (toastco.c) that appears to do what I need. In case anyone comes across this and is curious, the function I will be studying is “GetMediaRootDirectory”. I apologize I didn’t think to check there before posting this question; a good learning experience.

Make the following folders for different OS and HW.

  1. i386, amd64, x86 and ia64.

  2. Copy the following WdfCoInstaller01009.dll, winusbcoinstaller2.dll and WUDFUpdate_01009.dll to a x86 folder.

  3. Out side x86 folder keep the your.SYS and your.inf.

  4. In the inf file call the CoInstallers and sys files.

==============
Example:-
[Version]
Signature = "$Windows NT$"
Class = MyDeviceClass
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171}
Provider = %ProviderName%
DriverVer = 10/10/2009,1.0.0.0
CatalogFile=MyCatFile.cat

; ================== Class section ==================

[ClassInstall32]
Addreg=MyDeviceClassReg

[MyDeviceClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-1

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ProviderName% = MyDevice_WinUSB,NTx86,NTamd64,NTia64

;[CompanyName.Section]
%USB\CompanyName.DeviceDesc% =USB_Install, USB\Class_08

[MyDevice_WinUSB.NTx86]
;%USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0547&PID_1002
%USB\CompanyName.DeviceDesc% =USB_Install, USB\VID_058F&PID_6387
%USB\CompanyName.DeviceDesc% =USB_Install, USB\VID_0951&PID_1623
%USB\CompanyName.DeviceDesc% =USB_Install, USB\VID_0930&PID_6540
%USB\CompanyName.DeviceDesc% =USB_Install, USB\Class_08

[MyDevice_WinUSB.NTamd64]
;%USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0547&PID_1002
%USB\CompanyName.DeviceDesc% =USB_Install, USB\VID_058F&PID_6387
%USB\CompanyName.DeviceDesc% =USB_Install, USB\VID_0951&PID_1623
%USB\CompanyName.DeviceDesc% =USB_Install, USB\VID_0930&PID_6540
%USB\CompanyName.DeviceDesc% =USB_Install, USB\Class_08

[MyDevice_WinUSB.NTia64]
%USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0547&PID_1002
%USB\CompanyName.DeviceDesc% =USB_Install, USB\VID_058F&PID_6387
%USB\CompanyName.DeviceDesc% =USB_Install, USB\VID_0951&PID_1623
%USB\CompanyName.DeviceDesc% =USB_Install, USB\VID_0930&PID_6540
%USB\CompanyName.DeviceDesc% =USB_Install, USB\Class_08

; =================== Installation ===================

;[1]
[USB_Install]
Include=winusb.inf
Needs=WINUSB.NT

;[2]
[USB_Install.Services]
Include=winusb.inf
AddService=WinUSB,0x00000002,WinUSB_ServiceInstall

;[3]
[WinUSB_ServiceInstall]
DisplayName = %WinUSB_SvcDesc%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\WinUSB.sys

;[4]
[USB_Install.Wdf]
KmdfService=WINUSB, WinUsb_Install

[WinUSB_Install]
KmdfLibraryVersion=1.5

;[5]
[USB_Install.HW]
AddReg=Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{b35924d6-3e16-4a9e-9782-5524a4b79bac}"

;[6]
[USB_Install.CoInstallers]
AddReg=CoInstallers_AddReg
CopyFiles=CoInstallers_CopyFiles

[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","winusbcoinstaller2.dll"

[CoInstallers_CopyFiles]
winusbcoinstaller2.dll
WdfCoInstaller01009.dll

[DestinationDirs]
CoInstallers_CopyFiles=11

; ================= Source Media Section =====================
;[7]

[SourceDisksNames]
1 = %DISK_NAME%,,,\x86
2 = %DISK_NAME%,,,\amd64
3 = %DISK_NAME%,,,\ia64

[SourceDisksFiles.x86]
winusbcoinstaller2.dll=1
WdfCoInstaller01009.dll=1

[SourceDisksFiles.amd64]
winusbcoinstaller2.dll=2
WdfCoInstaller01009.dll=2

[SourceDisksFiles.ia64]
winusbcoinstaller2.dll=3
WdfCoInstaller01009.dll=3

; =================== Strings ===================

[Strings]
ProviderName="SISOUsbPrototype"
USB\MyDevice.DeviceDesc="Test using USB only"
USB\CompanyName.DeviceDesc="CompanyName USB Device"
WinUSB_SvcDesc="USB Test"
DISK_NAME="My Install Disk"
ClassName="MyDeviceClass"

xxxxx@gmail.com wrote:

Make the following folders for different OS and HW.

  1. i386, amd64, x86 and ia64.

There is no difference between i386 and x86, and almost no one is making
ia64 drivers these days.

  1. Copy the following WdfCoInstaller01009.dll, winusbcoinstaller2.dll and WUDFUpdate_01009.dll to a x86 folder.

You will need one set of those DLLs for every platform you need to support.

  1. Out side x86 folder keep the your.SYS and your.inf.

No. You should have your x86 .sys file in the same directory as the x86
co-installer, and the amd64 .sys file in the same directory as the amd64
co-installer. Your example doesn’t use a .sys file, so this is not an
issue.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.