다음을 통해 공유


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, MiniportStartDeviceMiniportFilterResourceRequirements 함수의 진입점을 정의합니다.

NDIS가 PnP(플러그 앤 플레이) 관리자로부터 추가 디바이스 요청을 받으면 NDIS는 미니포트 드라이버의 MiniportAddDevice 함수를 호출합니다. NDIS가 MiniportAddDeviceMiniportAdapterHandle 매개 변수로 전달하는 핸들은 NDIS가 나중에 MiniportInitializeEx 함수에 전달하는 핸들입니다.

MiniportAddDevice드라이버는 NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES 구조를 초기화하고 이 구조를 NdisMSetMiniportAttributes 함수에 전달합니다. NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES 구조에는 디바이스에 대한 미니포트 드라이버 할당 컨텍스트 영역에 대한 핸들인 MiniportAddDeviceContext 멤버가 포함됩니다. NDIS는 나중에 이 컨텍스트 핸들을 MiniportRemoveDevice, MiniportFilterResourceRequirements, MiniportStartDeviceMiniportInitializeEx 함수에 제공합니다. MiniportInitializeEx에 대한 컨텍스트 핸들은 NDIS_MINIPORT_INIT_PARAMETERS 구조체의 MiniportAddDeviceContext 멤버로 전달되며, 이 구조체는 MiniportInitParameters 매개 변수에 의해 가리켜집니다.

NDIS가 MiniportAddDevice 호출하고 MiniportAddDevice NDIS_STATUS_SUCCESS 반환하면 NDIS는 IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP(I/O 요청 패킷)를 받을 때마다 MiniportFilterResourceRequirements 함수를 호출합니다. MiniportFilterResourceRequirements 각 MSI-X 메시지에 대한 인터럽트 선호도를 변경하거나, 메시지 인터럽트 리소스를 추가하거나, 드라이버가 MiniportInitializeEx 함수에서 줄 기반 인터럽트에 등록하는 경우 메시지 인터럽트 리소스를 제거할 수 있습니다. 인터럽트 선호도 정책을 설정하는 방법에 대한 자세한 내용은 MSI-X 리소스 필터링참조하세요.

NDIS가 PnP 관리자로부터 디바이스 제거 요청을 받으면 NDIS는 미니포트 드라이버의 MiniportRemoveDevice 함수를 호출합니다. MiniportRemoveDevice 함수는 MiniportAddDevice 함수가 수행한 작업을 실행 취소해야 합니다.