建立不同的資源對應
雖然標準資源對應只能將整個父資源指派給多工裝置的子系,但不同的資源對應可讓您將父資源細分mf.sys列舉的子系。 Windows XP 和更新版本的 NT 型作業系統支援不同的資源對應。
例如,請考慮 PCI 匯流排上的多埠序列卡。 假設卡片的每個 16550 UART 函式都需要一組八個 I/O 埠和單一共用中斷。 也假設卡片會實作為單一 PCI 函式。 在此案例中,通常會要求單一 I/O 埠區塊,然後將此區塊分割成八個區段,每個 16550 UART 函式各有一個。
除了卡片的 16550 UART 函式所需的 I/O 埠和中斷資源之外,假設裝置也需要記憶體範圍和裝置私人資源。
根據這些假設,mf.sys會傳回此裝置的資源需求清單,如下所示:
Resourcenumber | 資源 |
---|---|
00 | 記憶體範圍 基底暫存器位址 (BAR) 0 |
01 | 私人資料 |
02 | 記憶體範圍 列 1 |
03 | 私人資料 |
04 | I/O 埠範圍 列 2 |
05 | 私人資料 |
06 | 中斷 |
廠商使用 INF 檔案指示詞來指定卡片的 16550 UART 函式之間共用這些資源。 對於需要裝置資源區段的每個函式,您必須在 INF 中使用 VaryingResourceMap 專案來建立登錄專案。 以下是此裝置 INF 檔案的摘錄:
[DDInstall.RegHW]
; for each "child" function list hardware ID and resource map
; and/or varying resource map
HKR,Child0002,HardwareID,, child0002-hardware ID
HKR,Child0002,VaryingResourceMap,1,04, 10,00,00,00, 08,00,00,00
HKR,Child0002,ResourceMap,1,06
包含 VaryingResourceMap 的行會解譯如下:
VaryingResourceMap參數後面的 「1」 會指定登錄專案的資料類型是REG_BINARY。
「1」 後面的數位是不同的資源對應值。 '04' 表示父資源,這是我們指派給這個子系的區段。 在此情況下,我們會將資源 04 (BAR) 2 的區段指派給子 (,也就是代表每個序列埠) 八個 I/O 埠範圍的一部分。
接下來的兩個 DWORD 表示第一個是資源中的位移,第二個是應該配置給這個子系的範圍長度。 在此情況下,會配置八個 I/O 埠給這個子系,從位移開始0x10父資源。
如果這個子系需要另一個父資源,則會在第一個資源之後,在 INF 的同一行中包含資源的編號、長度和位移。
ResourceMap參數描述于建立標準資源對應中,並指出此子系應該取得資源 06 的共用,在此情況下是 PCI 裝置的中斷。
以下是此裝置的更完整範例,指定四個子函式:
[Version]
Signature="$Windows NT$"
Class=MultiFunction
ClassGUID={4d36e971-e325-11ce-bfc1-08002be10318}
Provider=%MYCOMPANY%
DriverVer=1/20/2000
CatalogFile=ExampleCatalog.cat
PnpLockdown=1
[ControlFlags]
ExcludeFromSelect=*
[Manufacturer]
%MYCOMPANY%=MYCOMPANY,NTamd64
[MYCOMPANY.NTamd64]
%MYCOMPANY_4PORT%=MYCOMPANY4PORT_inst, PCI\VEN_10B5&DEV_9050&SUBSYS_003112E0
[MYCOMPANY4PORT_inst]
Include = mf.inf
Needs = MFINSTALL.mf
[MYCOMPANY4PORT_inst.HW]
AddReg=MYCOMPANY4PORT_inst.RegHW
[MYCOMPANY4PORT_inst.Services]
Include = mf.inf
Needs = MFINSTALL.mf.Services
[MYCOMPANY4PORT_inst.RegHW]
HKR,Child0000,HardwareID,,*PNP0501
HKR,Child0000,VaryingResourceMap,1,04, 00,00,00,00, 08,00,00,00
HKR,Child0000,ResourceMap,1,06
HKR,Child0001,HardwareID,,*PNP0501
HKR,Child0001,VaryingResourceMap,1,04, 08,00,00,00, 08,00,00,00
HKR,Child0001,ResourceMap,1,06
HKR,Child0002,HardwareID,,*PNP0501
HKR,Child0002,VaryingResourceMap,1,04, 10,00,00,00, 08,00,00,00
HKR,Child0002,ResourceMap,1,06
HKR,Child0003,HardwareID,,*PNP0501
HKR,Child0003,VaryingResourceMap,1,04, 18,00,00,00, 08,00,00,00
HKR,Child0003,ResourceMap,1,06
[Strings]
MYCOMPANY= "MYCOMPANY Inc."
MYCOMPANY_4PORT="MYCOMPANY 4PORT"