Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Chociaż standardowe mapy zasobów mogą przypisywać tylko cały zasób nadrzędny do elementu podrzędnego urządzenia wielofunkcyjnego, zróżnicowane mapy zasobów umożliwiają podzielenie zasobu nadrzędnego między elementy podrzędne wyliczane przez mf.sys. Różne mapy zasobów są obsługiwane w systemie Windows XP i nowszych wersjach systemu operacyjnego opartego na NT.
Rozważmy na przykład wieloportową kartę szeregową na magistrali PCI. Załóżmy, że każda z funkcji UART karty 16550 wymaga zestawu ośmiu portów we/wy i jednego, współużytkowanego przerwania. Załóżmy również, że karta jest implementowana jako pojedyncza funkcja PCI. W tym scenariuszu zwykle żąda się pojedynczego bloku portów we/wy, a następnie podzielić ten blok na osiem segmentów, po jednym dla każdej funkcji UART 16550.
Oprócz zasobów portu we/wy i przerwań wymaganych przez funkcje UART karty 16550, załóżmy, że urządzenie wymaga również zakresów pamięci i zasobów prywatnych związanych z urządzeniem.
Na podstawie tych założeń mf.sys zwróci listę wymagań dotyczących zasobów dla tego urządzenia, skonstruowaną w następujący sposób:
| Numer zasobu | Zasób |
|---|---|
| 00 | Zakres pamięci Podstawowy adres rejestru (BAR) 0 |
| 01 | Dane prywatne |
| 02 | Zakres pamięci PASEK 1 |
| 03 | Dane prywatne |
| 04 | Zakres portów we/wy SŁUPEK 2 |
| 05 | Dane prywatne |
| 06 | Przerwanie |
Dostawcy używają dyrektyw plików INF, aby określić udostępnianie tych zasobów wśród funkcji UART karty 16550. Dla każdej funkcji wymagającej segmentu zasobów urządzenia należy użyć wpisu VaryingResourceMap w INF, aby utworzyć wpis rejestru. Poniżej znajduje się fragment pliku INF dla tego urządzenia:
[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
Wiersz zawierający VaryingResourceMap jest interpretowany w następujący sposób:
Wartość "1" po parametrze VaryingResourceMap określa, że typ danych wpisu rejestru jest REG_BINARY.
Liczby następujące po "1" to zmienne wartości mapy zasobów. Wartość "04" wskazuje zasób nadrzędny, z którego przypisujemy segment do tego elementu podrzędnego. W tym przypadku przypisujemy segment zasobu 04 (BAR 2) do elementu podrzędnego (czyli fragment zasobu reprezentującego osiem zakresów portów we/wy dla każdego portu szeregowego).
Następne dwa DWORD-y wskazują najpierw przesunięcie w zasobie, a po drugie, długość zakresu, który należy przydzielić temu elementowi podrzędnemu. W tym przypadku dla tego podrzędnego zasobu przydzielanych jest osiem portów we/wy, zaczynając od przesunięcia 0x10 w zasobie nadrzędnym.
Jeśli to dziecko wymagało innego zasobu rodzica, liczba, długość i przesunięcie zasobu zostaną uwzględnione w tym samym wierszu pliku INF, zgodnie z pierwszym zasobem.
Parametr ResourceMap został opisany w temacie Tworzenie standardowych map zasobów i wskazuje, że ten element powinien uzyskać udział zasobu 06, co w tym przypadku oznacza przerwanie urządzenia PCI.
Poniżej przedstawiono bardziej kompletny przykład dla tego urządzenia, określając cztery funkcje podrzędne:
[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"