표준 리소스 맵은 다기능 디바이스의 자식에만 전체 부모 리소스를 할당할 수 있지만 다양한 리소스 맵을 사용하면 mf.sys열거된 자식 간에 부모 리소스를 세분화할 수 있습니다. 다양한 리소스 맵은 Windows XP 이상 버전의 NT 기반 운영 체제에서 지원됩니다.
예를 들어 PCI 버스에서 다중 포트 직렬 카드를 고려합니다. 카드의 각 16550 UART 함수에 8개의 I/O 포트 집합과 단일 공유 인터럽트가 필요하다고 가정합니다. 또한 카드가 단일 PCI 함수로 구현된다고 가정합니다. 이 시나리오에서는 I/O 포트의 단일 블록을 요청한 다음 이 블록을 각 16550 UART 함수에 대해 하나씩 8개의 세그먼트로 분할하는 것이 일반적입니다.
카드의 16550 UART 함수에 필요한 I/O 포트 및 인터럽트 리소스 외에도 디바이스에 메모리 범위 및 디바이스 개인 리소스도 필요하다고 가정합니다.
이러한 가정에 따라 mf.sys 다음과 같이 생성된 이 디바이스에 대한 리소스 요구 사항 목록을 반환합니다.
| 리소스 번호 | 리소스 |
|---|---|
| 00 | 메모리 범위 BAR(기본 레지스터 주소) 0 |
| 01 | 프라이빗 데이터 |
| 02 | 메모리 범위 BAR 1 |
| 03 | 프라이빗 데이터 |
| 04 | I/O 포트 범위 BAR 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)의 세그먼트를 자식에 할당합니다(즉, 각 직렬 포트에 대한 8개의 I/O 포트 범위를 나타내는 리소스 조각).
다음 두 DWORD는 먼저 리소스에 대한 오프셋과 이 자식에 할당해야 하는 범위의 길이를 나타냅니다. 이 경우 부모 리소스에 대한 오프셋 0x10 시작하여 8개의 I/O 포트가 이 자식에 할당됩니다.
이 자식에 다른 부모 리소스가 필요한 경우 리소스의 수, 길이 및 오프셋이 첫 번째 리소스에 이어 INF의 동일한 줄에 포함됩니다.
ResourceMap 매개 변수는 표준 리소스 맵 만들기에 설명되어 있으며 이 자식이 리소스 06의 공유를 가져와야 하며, 이 경우 PCI 디바이스의 인터럽트입니다.
다음은 4개의 자식 함수를 지정하는 이 디바이스에 대한 보다 완전한 예제입니다.
[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"