MSI-X 사전 등록
MSI-X에 대한 인터럽트 친화성 변경을 지원하거나 메시지 인터럽트 리소스를 제거하려면 미니포트 드라이버가 리소스 요구 사항 필터 함수를 설정해야 합니다. 이 사전 등록 단계는 NDIS가 MiniportInitializeEx 함수를 호출하기 전에 발생합니다.
리소스 요구 사항 필터 함수를 설정하려면 미니포트 드라이버가 MiniportSetOptions 함수를 제공해야 합니다. 미니포트 드라이버가 DriverEntry 루틴에서 NdisMRegisterMiniportDriver 함수를 호출하면 드라이버는 NDIS_MINIPORT_DRIVER_CHARACTERISTICS 구조에서 MiniportSetOptions의 진입점을 전달합니다. NDIS는 NdisMRegisterMiniportDriver의 컨텍스트에서 MiniportSetOptions 함수를 호출합니다.
MiniportSetOptions에서 미니포트 드라이버는 NdisSetOptionalHandlers 함수를 호출하고 NDIS_MINIPORT_PNP_CHARACTERISTICS 구조를 지정합니다. 이 구조체는 MiniportAddDevice, MiniportRemoveDevice, MiniportStartDevice 및 MiniportFilterResourceRequirements 함수의 진입점을 정의합니다.
NDIS가 플러그 앤 플레이(PnP) 관리자로부터 추가 디바이스 요청을 받으면 NDIS는 미니포트 드라이버의 MiniportAddDevice 함수를 호출합니다. MiniportAdapterHandle 매개 변수에서 NDIS가 MiniportAddDevice에 전달하는 핸들은 NDIS가 나중에 MiniportInitializeEx 함수에 전달하는 핸들입니다.
MiniportAddDevice에서 드라이버는 NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES 구조를 초기화하고 이 구조를 NdisMSetMiniportAttributes 함수에 전달합니다. NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES 구조에는 디바이스에 대한 미니포트 드라이버 할당 컨텍스트 영역에 대한 핸들인 MiniportAddDeviceContext 멤버가 포함됩니다. NDIS는 나중에 MiniportRemoveDevice, MiniportFilterResourceRequirements, MiniportStartDevice 및 MiniportInitializeEx 함수에 이 컨텍스트 핸들을 제공합니다. MiniportInitializeEx의 경우 컨텍스트 핸들은 MiniportInitParameters 매개 변수가 가리키는 NDIS_MINIPORT_INIT_PARAMETERS 구조체의 MiniportAddDeviceContext 멤버에 전달됩니다.
NDIS가 MiniportAddDevice를 호출하고 MiniportAddDevice가 NDIS_STATUS_SUCCESS 반환하면 NDIS는 IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP(I/O 요청 패킷)를 받을 때마다 MiniportFilterResourceRequirements 함수를 호출합니다. MiniportFilterResourceRequirements 는 드라이버가 MiniportInitializeEx 함수에서 줄 기반 인터럽트에 등록하는 경우 각 MSI-X 메시지에 대한 인터럽트 선호도를 변경하거나, 메시지 인터럽트 리소스를 추가하거나, 메시지 인터럽트 리소스를 제거할 수 있습니다. 인터럽트 선호도 정책을 설정하는 방법에 대한 자세한 내용은 MSI-X 리소스 필터링을 참조하세요.
NDIS가 PnP 관리자로부터 디바이스 제거 요청을 받으면 NDIS는 미니포트 드라이버의 MiniportRemoveDevice 함수를 호출합니다. MiniportRemoveDevice 함수는 MiniportAddDevice 함수가 수행한 작업을 실행 취소해야 합니다.