미니포트 드라이버는 MSI-X 지원하고 각 MSI-X 메시지에 대한 인터럽트 선호도를 변경하거나 메시지 인터럽트 리소스를 제거하는 경우 리소스 요구 사항 필터 함수를 등록해야 합니다.
NDIS는 NIC(네트워크 인터페이스 카드)에 대한 IRP_MN_FILTER_RESOURCE_REQUIREMENTS I/O 요청 패킷을 수신한 후 MiniportFilterResourceRequirements 함수를 호출합니다. NDIS는 디바이스 스택의 기본 함수 드라이버가 IRP를 완료한 후 MiniportFilterResourceRequirements 를 호출합니다.
NDIS는 MiniportAddDevice 함수가 NDIS_STATUS_SUCCESS 반환한 후 MiniportFilterResourceRequirements를 호출합니다. NDIS는 MiniportRemoveDevice를 호출하기 전에 언제든지 MiniportFilterResourceRequirements를 다시 호출할 수 있습니다. 미니포트가 실행되는 동안 NDIS는 MiniportFilterResourceRequirements 를 호출할 수 있습니다. 미니포트는 아래 설명된 대로 리소스 목록을 수정할 수 있지만 미니포트는 새 리소스를 즉시 사용하려고 시도해서는 안 됩니다. NDIS는 결국 새 리소스를 사용하여 미니포트를 중지하고 다시 초기화합니다. 미니포트가 새 리소스를 사용하려고 시도하는 경우에만 해당합니다.
IRP_MN_FILTER_RESOURCE_REQUIREMENTSIrp-IoStatus.Information>에서 리소스 목록을 IO_RESOURCE_REQUIREMENTS_LIST 구조로 제공합니다. 목록의 리소스는 IO_RESOURCE_DESCRIPTOR 구조로 설명됩니다.
미니포트 드라이버는 MSI-X 메시지를 설명하는 CmResourceTypeInterrupt 형식의 각 리소스에 대한 인터럽트 선호도 정책을 수정할 수 있습니다. 선호도 정책이 특정 프로세서 집합을 대상으로 지정하도록 요청하는 경우 미니포트 드라이버는 IO_RESOURCE_DESCRIPTOR 구조의 Interrupt.TargetedProcessors에서 KAFFINITY 마스크를 설정합니다.
미니포트 드라이버는 메시지 인터럽트 리소스인 CmResourceTypeInterrupt 유형의 모든 리소스를 제거할 수 있습니다. 그런 다음 드라이버는 MiniportInitializeEx 함수에서 줄 기반 인터럽트에 등록할 수 있습니다. 미니포트 드라이버가 이러한 메시지 인터럽트 리소스를 제거하지 않으면 드라이버가 MiniportInitializeEx에서 줄 기반 인터럽트를 등록하려고 하면 운영 체제가 실패합니다.
NDIS 6.1 이상 미니포트 드라이버는 리소스 목록에 메시지 인터럽트 리소스를 추가할 수 있습니다. 예를 들어 CPU가 8개인 컴퓨터에서 NIC가 4개의 MSI-X 메시지를 생성할 수 있고 운영 체제에서 4개의 메시지 인터럽트를 사용하도록 설정하는 경우 운영 체제는 디바이스의 MSI-X 구성 공간에서 4개의 메시지 테이블 항목을 초기화하고 리소스 목록에 4개의 메시지 인터럽트 리소스를 배치합니다. 이 경우 미니포트 드라이버에는 더 많은 메시지 인터럽트 리소스가 필요하므로 리소스 목록에 4개의 메시지 인터럽트 리소스를 할당하고 각 MSI-X 메시지의 선호도를 CPU로 설정할 수 있습니다. 운영 체제에서 더 많은 메시지 인터럽트 리소스를 제공할 수 있는 경우 미니포트 어댑터는 시작될 때 8개의 메시지 인터럽트 리소스를 받습니다. 이 경우 메시지에는 0에서 7까지의 숫자가 있습니다.
목록의 각 메시지 인터럽트 리소스에는 나중에 목록에 표시되는 순서에 해당하는 메시지 번호가 할당됩니다. 예를 들어 목록의 첫 번째 메시지 인터럽트 리소스는 메시지 0에 할당되고, 두 번째 메시지는 메시지 1에 할당됩니다.
런타임에 CPU에 MSI-X 테이블 항목을 할당하기 위해 미니포트 드라이버는 NdisMConfigMSIXTableEntry 함수를 호출하여 테이블 항목을 CPU에 이미 설정된 MSI-X 메시지에 매핑할 수 있습니다. MSI-X 테이블 항목에 대한 구성 작업에 대한 자세한 내용은 MSI-X 테이블 항목의 CPU 선호도 변경을 참조하세요.
새 리소스 요구 사항 목록에 메모리를 할당하려면 NdisAllocateMemoryWithTagPriority 함수를 사용합니다. NdisFreeMemory 함수를 사용하여 이전 리소스 요구 사항 목록에 대한 메모리를 해제할 수 있습니다.
미니포트 드라이버는 CmResourceTypeMemory 및 CmResourceTypePort 리소스와 같은 다른 리소스를 수정해서는 안 됩니다. 미니포트 드라이버는 리소스 목록에 새 리소스를 추가하지 않아야 합니다. 그러나 NDIS 6.1 이상 미니포트 드라이버는 메시지 인터럽트 리소스를 더 추가할 수 있습니다. 미니포트 드라이버가 메시지 인터럽트 리소스를 더 추가하는 경우 MiniportStartDevice 함수에서 제거해서는 안 됩니다.
리소스를 추가하고 제거하는 방법에 대한 자세한 내용은 IRP_MN_FILTER_RESOURCE_REQUIREMENTS 참조하세요.