Loading the FDO ...

Simply stated I am having problems getting my function driver to install,
and or load itself as the function driver for my bus driver. If it does
install, the device object passed to it is for the PnPManager instead of the
class FibreGear.

Here is what I currently have in the device manager:

FibreGear
FC2100
FC2200

This was produced from the following INF excerpts:

Signature=“$WINDOWS NT$”
Class=%ClassName%
ClassGuid={781EF630-72B2-11d2-B852-00C04FAD5171}
Provider=%DFG%
DriverVer=10/19/2000, 3.00.0001.1
CatalogFile=FibreGear.cat

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

[ClassInstall32]
Addreg=FibreGearClassReg

[FibreGearClassReg]
HKR,%ClassName%

[DFG]
%FibreGear.DeviceDesc1%=FibreGear_Device, PCI\VEN_1077&DEV_2100
%FibreGear.DeviceDesc2%=FibreGear_Device, PCI\VEN_1077&DEV_2200
%FibreGear.DeviceDesc3%=FibreGear_Device, PCI\VEN_1077&DEV_2300

[FibreGear_Device.NT]
CopyFiles=Drivers_Dir,FibreGear_Dir,FibreGearCoInstal_Dir

DFG = “Delphi FibreGear, Inc.”
ClassName = “FibreGear”
FibreGear.DeviceDesc1 = “FC2100”
FibreGear.DeviceDesc2 = “FC2200”
FibreGear.DeviceDesc3 = “FC2300”

The FibreGear service is loaded in the System Bus Extender group.

FgPeer is the function driver and is to load in the Extended Base group.
However when I attempt to install it, I get “The specified location does not
contain information about your hardware.” The INF file I’m using to load
FgPeer is as follows: Note that the line under [DFG] does not appear to be
completed, because I haven’t “stumbled” on what goes in there to make the
PnP Manager load FgPeer as the FDO for FibreGear.

[Version]
Signature=“$WINDOWS NT$”
Provider=%DFG%
Class=%ClassName%
ClassGuid={781EF630-72B2-11d2-B852-00C04FAD5171}
DriverVer=10/19/2000, 3.00.0001.1
CatalogFile=FgPeer.cat

[DestinationDirs]
Drivers_Dir = 12

[SourceDisksNames]
1 = %DiskId1%,“”

[SourceDisksFiles]
FgPeer.sys = 1,

;*****************************************
; FibreGear Peer to Peer Install Section
;*****************************************

[Manufacturer]
%DFG%=DFG

[DFG]
%FgPeer.DeviceDesc%=FgPeer_Device,

[FgPeer_Device.NT]
CopyFiles=Drivers_Dir

[Drivers_Dir]
FgPeer.sys

;-------------- Event Log registration
[FgPeer_EventLog_Inst]
AddReg = FgPeer_EventLog_Inst.AddReg

[FgPeer_EventLog_Inst.AddReg]
HKR,EventMessageFile,%REG_EXPAND_SZ%,“%%SystemRoot%%\System32\IoLogMsg.dll;
%%SystemRoot%%\System32\Drivers\FgPeer.sys”
HKR,TypesSupported,%REG_DWORD%,7

;-------------- Service installation
[FgPeer_Device.NT.Services]
AddService = FgPeer,%SPSVCINST_ASSOCSERVICE%, FgPeer_Service_Inst,
FgPeer_EventLog_Inst

; -------------- Fibre Gear driver install sections
[FgPeer_Service_Inst]
DisplayName = %FgPeer.SVCDESC%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 2 ; SERVICE_AUTO_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\FgPeer.sys
LoadOrderGroup = Extended Base

[Strings]
SPSVCINST_ASSOCSERVICE=
DFG = “Delphi FibreGear, LLC”
ClassName = “FibreGear”
DiskId1 = “Delphi FibreGear Drivers Installation Disk #1
FgPeer.DeviceDesc = “FgPeer”
FgPeer.SVCDESC = “FibreGear Peer to Peer Driver”

Shouldn’t a pnp function driver be demand-start (3) [or boot (0) if
its PDOs are enumerated during that phase] rather than the auto-
start (2) that you’ve specified?

What do you imagine your device hierarchy should look like? Something
like this:

PCI bus driver creates PDO for QLogic cards,
FibreGear provides FDOs for QLogic PDOs,
FibreGear invalidates bus relations on QLogic (or pseudo?) bus PDOs,
reports its own device PDOs as children of bus,
(what are the hardware and compatible IDs of these PDOs?)
FgPeer provides FDOs for PDOs created by FibreGear

?

Your [DFG] section ought to name the install section and then the full
hardware ID string. The device ID must match that which is returned by
the PDO you’ve created.

Here’s one that works:

[Manufacturer]
%smlv_manufacturer% = smlv_models

[smlv_models]
%smlv_dev_desc% = smlv_ddinst, Root\smlv

[smlv_ddinst]
CopyFiles = smlv_copy_driver

[smlv_ddinst.Services]
AddService = smlv, %SPSVCINST_ASSOCSERVICE% ,smlv_drv_install

[smlv_drv_install]
DisplayName = %smlv_svc_desc%
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_BOOT_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
ServiceBinary = %12%\smlv.sys

The driver smlv.sys is the function driver for a PDO for a pseudo
device with device and hardware IDs “root\smlv”.

How are you invoking the peer device .INF file?


Dave Cox
Hewlett-Packard Co.
HPSO/SMSO (Santa Barbara)
https://ecardfile.com/id/Dave+Cox

-----Original Message-----
From: Gary Little [mailto:xxxxx@delphieng.com]
Sent: Monday, October 30, 2000 10:01 AM
To: NT Developers Interest List
Subject: Loading the FDO …

Simply stated I am having problems getting my function driver to install,
and or load itself as the function driver for my bus driver. If it does
install, the device object passed to it is for the PnPManager instead of
the class FibreGear.

Here is what I currently have in the device manager:

FibreGear
FC2100
FC2200

This was produced from the following INF excerpts:

Signature=“$WINDOWS NT$”
Class=%ClassName%
ClassGuid={781EF630-72B2-11d2-B852-00C04FAD5171}
Provider=%DFG%
DriverVer=10/19/2000, 3.00.0001.1
CatalogFile=FibreGear.cat

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

[ClassInstall32]
Addreg=FibreGearClassReg

[FibreGearClassReg]
HKR,%ClassName%

[DFG]
%FibreGear.DeviceDesc1%=FibreGear_Device, PCI\VEN_1077&DEV_2100
%FibreGear.DeviceDesc2%=FibreGear_Device, PCI\VEN_1077&DEV_2200
%FibreGear.DeviceDesc3%=FibreGear_Device, PCI\VEN_1077&DEV_2300

[FibreGear_Device.NT]
CopyFiles=Drivers_Dir,FibreGear_Dir,FibreGearCoInstal_Dir

DFG = “Delphi FibreGear, Inc.”
ClassName = “FibreGear”
FibreGear.DeviceDesc1 = “FC2100”
FibreGear.DeviceDesc2 = “FC2200”
FibreGear.DeviceDesc3 = “FC2300”

The FibreGear service is loaded in the System Bus Extender group.

FgPeer is the function driver and is to load in the Extended Base group.
However when I attempt to install it, I get “The specified location does
not contain information about your hardware.” The INF file I’m using to
load FgPeer is as follows: Note that the line under [DFG] does not appear
to be completed, because I haven’t “stumbled” on what goes in there to
make the PnP Manager load FgPeer as the FDO for FibreGear.

[Version]
Signature=“$WINDOWS NT$”
Provider=%DFG%
Class=%ClassName%
ClassGuid={781EF630-72B2-11d2-B852-00C04FAD5171}
DriverVer=10/19/2000, 3.00.0001.1
CatalogFile=FgPeer.cat

[DestinationDirs]
Drivers_Dir = 12

[SourceDisksNames]
1 = %DiskId1%,“”

[SourceDisksFiles]
FgPeer.sys = 1,

;*****************************************
; FibreGear Peer to Peer Install Section
;*****************************************

[Manufacturer]
%DFG%=DFG

[DFG]
%FgPeer.DeviceDesc%=FgPeer_Device,

[FgPeer_Device.NT]
CopyFiles=Drivers_Dir

[Drivers_Dir]
FgPeer.sys

;-------------- Event Log registration
[FgPeer_EventLog_Inst]
AddReg = FgPeer_EventLog_Inst.AddReg

[FgPeer_EventLog_Inst.AddReg]
HKR,EventMessageFile,%REG_EXPAND_SZ%,“%%SystemRoot%%\System32\IoLogMsg.dl
l;%%SystemRoot%%\System32\Drivers\FgPeer.sys”
HKR,TypesSupported,%REG_DWORD%,7

;-------------- Service installation
[FgPeer_Device.NT.Services]
AddService = FgPeer,%SPSVCINST_ASSOCSERVICE%, FgPeer_Service_Inst,
FgPeer_EventLog_Inst

; -------------- Fibre Gear driver install sections
[FgPeer_Service_Inst]
DisplayName = %FgPeer.SVCDESC%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 2 ; SERVICE_AUTO_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\FgPeer.sys
LoadOrderGroup = Extended Base

[Strings]
SPSVCINST_ASSOCSERVICE=
DFG = “Delphi FibreGear, LLC”
ClassName = “FibreGear”
DiskId1 = “Delphi FibreGear Drivers Installation Disk #1
FgPeer.DeviceDesc = “FgPeer”
FgPeer.SVCDESC = “FibreGear Peer to Peer Driver”

David,

To quickly address your last question:

“How are you invoking the peer device .INF file?”

I thought the best way was to run the Add/Remove Hardware applet.

Gary

David,

Shouldn’t a pnp function driver be demand-start (3) [or boot (0) if
its PDOs are enumerated during that phase] rather than the auto-
start (2) that you’ve specified?
Yes … I’ve changed it to DEMAND.

What do you imagine your device hierarchy should look like? Something
like this:

PCI bus driver creates PDO for QLogic cards,
FibreGear provides FDOs for QLogic PDOs,
FibreGear invalidates bus relations on QLogic (or pseudo?) bus PDOs,
reports its own device PDOs as children of bus,
FgPeer provides FDOs for PDOs created by FibreGear

You nailed it. That is what I want to do. Both drivers are ported from an NT
4, private interface model, and still need work and refinement for WDM, but
I thought with an AddDevice and install INF, that they would at least load
with the proper reference to the PDO; e.g. FibreGear’s AddDevice is passed
the DO of PnP, and FgPeer’s is passed the DO of FibreGear. Doing this in
FgPeer has proven to be elusive. FgPeer either does not load, or is passed
the DO for PnPManager.

(what are the hardware and compatible IDs of these PDOs?)

[DFG]
;
; These are the FibreGear bus PnP ids
;
%FibreGear.DeviceDesc1%=FibreGear_Device, PCI\VEN_1077&DEV_2100
%FibreGear.DeviceDesc2%=FibreGear_Device, PCI\VEN_1077&DEV_2200
%FibreGear.DeviceDesc3%=FibreGear_Device, PCI\VEN_1077&DEV_2300

[FibreGear_Device.NT]
CopyFiles=Drivers_Dir,FibreGear_Dir,FibreGearCoInstal_Dir