MINIPORT_ISR 콜백 함수(ndis.h)
NDIS는 NIC 또는 NIC와 인터럽트를 공유하는 다른 디바이스가 인터럽트를 생성할 때 MiniportInterrupt 함수를 호출합니다.
통사론
MINIPORT_ISR MiniportIsr;
BOOLEAN MiniportIsr(
[in] NDIS_HANDLE MiniportInterruptContext,
[out] PBOOLEAN QueueDefaultInterruptDpc,
[out] PULONG TargetProcessors
)
{...}
매개 변수
[in] MiniportInterruptContext
인터럽트 컨텍스트 정보 블록에 대한 핸들입니다. 미니포트 드라이버는 미니포트 드라이버가 전달한 MiniportInterruptContext 매개 변수에 이 핸들을 제공했습니다. NdisMRegisterInterruptEx 함수입니다.
[out] QueueDefaultInterruptDpc
미니포트 드라이버가 이 호출에서 반환되기 전에 설정하는 BOOLEAN 변수에 대한 포인터입니다. 미니포트 드라이버는 이 값을 TRUE 설정하여 드라이버에 기본(현재) CPU에 DPC가 필요함을 나타냅니다. 이 값이 TRUE 설정되면 NDIS는 TargetProcessors 매개 변수의 값을 무시합니다. FALSE 설정된 경우 NDIS는 TargetProcessors 매개 변수의 값을 사용하여 DPC를 예약합니다. QueueDefaultInterruptDpc TRUE 경우 NDIS는 MiniportInterrupt반환 값에 관계없이 DPC를 예약합니다.
[out] TargetProcessors
NDIS가 DPC를 예약해야 하는 대상 프로세서를 나타내는 비트 마스크입니다. 이 비트 마스크는 프로세서 그룹 0의 처음 32개 프로세서를 나타냅니다. 비트 마스크의 각 비트는 CPU를 식별합니다. 호출자가 비트 0을 설정하는 경우 NDIS는 CPU 0용 DPC를 예약합니다. 호출자가 비트 1을 설정하는 경우 NDIS는 CPU 1에 대한 DPC를 예약하는 등입니다. QueueDefaultInterruptDpc FALSE 설정되고 targetProcessors 0으로 설정된 경우 NDIS는 모든 DPC를 예약하지 않습니다. 그렇지 않으면 NDIS는 MiniportInterrupt반환 값에 관계없이 DPC를 예약합니다.
반환 값
MiniportInterrupt 다음 값 중 하나를 반환합니다.
반환 코드 | 묘사 |
---|---|
|
MiniportInterrupt 기본 NIC가 인터럽트를 생성했음을 확인했습니다. |
|
MiniportInterrupt 기본 NIC가 인터럽트를 생성하지 않았다고 확인했습니다. |
발언
NdisMRegisterInterruptEx 함수에 인터럽트를 등록하는 미니포트 드라이버는 MiniportInterrupt 함수를 제공해야 합니다.
미니포트 드라이버는 MiniportInterrupt 함수에서 가능한 한 적은 작업을 수행해야 합니다. NIC가 MiniportInterruptDPC 함수에 생성하는 인터럽트에 대한 I/O 작업을 연기해야 합니다.
NIC의 인터럽트 라인에서 인터럽트가 발생하면 NDIS는 미니포트 드라이버의 MiniportInterrupt 함수를 호출합니다.
모든 NIC는 I/O 버스의 다른 디바이스와 라인 기반 인터럽트 공유가 가능합니다. NIC가 인터럽트를 생성하지 않은 경우 MiniportInterrupt 시스템이 인터럽트를 생성한 디바이스의 드라이버를 호출할 수 있도록 FALSE 즉시 반환해야 합니다. QueueDefaultInterruptDpc FALSE 설정되고 TargetProcessors 매개 변수가 0으로 설정된 경우 NDIS는 모든 DPC를 예약하지 않습니다. 그렇지 않으면 NDIS는 MiniportInterruptminiportInterrupt턴 값을 다시관계없이 DPC를 예약합니다.
인터럽트가 NIC에 대한 경우 MiniportInterrupt NIC에서 인터럽트를 해제하고 인터럽트에 대해 수행해야 하는 상태를 저장하고 MiniportInterruptDPC 함수에 가능한 한 많은 I/O 처리를 연기합니다.
기본 NIC가 지정된 인터럽트(인터럽트)를 생성하고 미니포트 드라이버가 DPC(지연 프로시저 호출)를 요청하는 경우 미니포트 드라이버는 NIC의 모든 추가 인터럽트 기능을 사용하지 않도록 설정하고 모든 DPC가 완료된 후 인터럽트 다시 활성화해야 합니다.
미니포트 드라이버는 기본 CPU에 대해서만 DPC를 예약하도록 QueueDefaultInterruptDpcTRUE 설정해야 합니다. 예를 들어 다음과 같은 경우 드라이버는 이 작업을 수행할 수 있습니다.
- NIC는 송신 작업 또는 다른 CPU에서 실행되지 않는 다른 요청의 완료를 알리기 위해 인터럽트를 생성했습니다.
- NIC는 수신된 데이터를 알리기 위해 인터럽트(interrupt)를 생성했으며 미니포트 드라이버는 수신된 패킷을 별도의 DPC로 처리할 수 없습니다.
- 인터럽트는 수신된 패킷을 나타내고 미니포트 드라이버는 수신된 패킷을 별도의 DPC로 처리할 수 있지만 RSS(수신측 크기 조정) 미니포트 드라이버에 대해 사용하도록 설정되지 않았습니다. 자세한 내용은 다음을 참조하세요. OID_GEN_RECEIVE_SCALE_CAPABILITIES 및 OID_GEN_RECEIVE_SCALE_PARAMETERS.
미니포트 드라이버는 다음을 호출할 수 있습니다. NdisMDeregisterInterruptEx는 MiniportInitializeEx 또는 MiniportHaltEx 함수에서 함수를NdisMRegisterInterruptEx사용하여 할당된 리소스를 해제합니다. NdisMDeregisterInterruptEx 반환되면 NDIS는 미니포트 드라이버의 MiniportInterrupt 또는 MiniportInterruptDPC 함수를 호출하지 않습니다.
NDIS는 NdisMRegisterInterruptEx대한 이전 호출에서 미니포트 드라이버가 등록한 인터럽트의 DIRQL에서 MiniportInterrupt 호출합니다. 따라서 MiniportInterruptNdisRawXxx 또는 NdisRead/WriteRegisterXxx 함수와 같은 NDIS 함수의 하위 집합을 호출해야 하며, 이는 IRQL에서 호출하기에 안전합니다.
예제
MiniportInterrupt 함수를 정의하려면 먼저 정의하는 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 함수 형식 집합을 제공합니다. 함수 형식을 사용하여 함수를 선언하면 드라이버 , SDV(정적 드라이버 검증 도구) 및 기타 확인 도구에 대한 코드 분석을데 도움이 되며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.예를 들어 "MyInterrupt"라는 MiniportInterrupt 함수를 정의하려면 다음 코드 예제와 같이 MINIPORT_ISR 형식을 사용합니다.
MINIPORT_ISR MyInterrupt;
그런 다음 다음과 같이 함수를 구현합니다.
_Use_decl_annotations_
BOOLEAN
MyInterrupt(
NDIS_HANDLE MiniportInterruptContext,
PBOOLEAN QueueDefaultInterruptDpc,
PULONG TargetProcessors
)
{...}
MINIPORT_ISR 함수 형식은 Ndis.h 헤더 파일에 정의됩니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 MINIPORT_ISR 함수 형식에 적용되는 주석이 사용되는지 확인합니다. 함수 선언 요구 사항에 대한 자세한 내용은 NDIS 드라이버함수 역할 형식을 사용하여 함수 선언을 참조하세요.
Use_decl_annotations대한 자세한 내용은 함수 동작 주석참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | NDIS 6.0 이상에서 지원됩니다. |
대상 플랫폼 | Windows |
헤더 | ndis.h(Ndis.h 포함) |
IRQL | 설명 섹션 참조 |