MINIPORT_SYNCHRONIZE_INTERRUPT 콜백 함수(ndis.h)

DIRQL 미만에서 실행되는 드라이버 함수가 MiniportInterrupt 함수와 리소스를 공유하는 경우 미니포트 드라이버는 MiniportSynchronizeInterrupt 처리 기를 제공해야 합니다.

메시지 신호 인터럽트의 경우 DIRQL 미만에서 실행되는 드라이버 함수가 MiniportMessageInterrupt 함수와 메시지 신호 인터럽트에 대한 리소스를 공유하는 경우 미니포트 드라이버는 MiniportSynchronizeMessageInterrupt 처리기를 제공합니다.

참고 메시지 신호가 없는 인터럽트에서 MINIPORT_SYNCHRONIZE_INTERRUPT 형식을 사용하거나 메시지 신호 인터럽트에서 MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT 형식을 사용하여 이 함수를 선언해야 합니다. 자세한 내용은 다음 예제 섹션을 참조하세요.
 

구문

MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;

BOOLEAN MiniportSynchronizeInterrupt(
  [in] NDIS_HANDLE SynchronizeContext
)
{...}

매개 변수

[in] SynchronizeContext

미니포트 드라이버의 MiniportXxx 또는 내부 함수가 를 호출할 때 제공되는 컨텍스트 영역에 대한 핸들입니다. NdisMSynchronizeWithInterruptEx 함수입니다.

반환 값

MiniportSynchronizeInterrupt 는 드라이버 결정 의미가 있는 부울 값을 반환합니다. NDIS가 NdisMSynchronizeWithInterruptEx에서 반환되는 경우 NDIS는 동일한 값을 반환합니다.

설명

참고 이 섹션의 정보는 "MiniportMessageInterrupt"에 대해 "MiniportInterrupt"를 대체하고 "MiniportSynchronizeInterrupt"를 "MiniportSynchronizeMessageInterrupt"로 대체하여 메시지 신호 인터럽트에 적용할 수도 있습니다.
 
DIRQL 미만에서 실행되는 미니포트 드라이버 함수가 NIC 레지스터와 같은 리소스를 드라이버의 MiniportInterrupt 함수와 공유하는 경우 해당 드라이버는 해당 리소스에 직접 액세스할 수 없습니다. 이러한 낮은 우선 순위 함수가 공유 리소스에 직접 액세스하려고 하면 MiniportInterrupt가 선점할 수 있으며, 이는 우선 순위가 낮은 드라이버 함수의 상태 변경을 재정의할 수 있습니다.

MiniportInterrupt를 사용하여 공유 리소스에 대한 액세스를 동기화하려면 우선 순위가 낮은 드라이버 함수가 를 호출해야 합니다. NdisMSynchronizeWithInterruptEx 함수입니다. 드라이버의 MiniportSynchronizeInterrupt 함수는 DIRQL의 공유 리소스에 액세스합니다. NdisMSynchronizeWithInterruptEx를 호출하면 이러한 미니포트 드라이버에서 경합 조건 및 교착 상태를 방지할 수 있습니다.

자체 간에 리소스를 공유하는 우선 순위가 낮은 드라이버 함수(DIRQL에서 실행되는 함수는 아님)는 스핀 잠금을 사용하여 공유 리소스를 보호해야 합니다.

MiniportSynchronizeInterrupt는 드라이버의 MiniportInitializeEx 함수가 를 호출할 때 할당된 DIRQL에서 실행됩니다. NdisMRegisterInterruptEx 함수입니다. DIRQL에서 실행되는 드라이버 함수와 마찬가지로 MiniportSynchronizeInterrupt 는 가능한 한 빨리 호출자에게 컨트롤을 반환해야 하며, 모든 IRQL에서 호출하는 데 안전한 NdisXxx 함수만 호출할 수 있습니다.

MiniportSynchronizeInterrupt 함수를 정의하려면 먼저 정의 중인 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 함수 형식 집합을 제공합니다. 함수 형식을 사용하여 함수를 선언하면 드라이버에 대한 코드 분석, SDV( 정적 드라이버 검증 도구 ) 및 기타 확인 도구에서 오류를 찾을 수 있으며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 " MySynchronizeInterrupt"라는 MiniportSynchronizeInterrupt 함수를 정의하려면 다음 코드 예제와 같이 MINIPORT_SYNCHRONIZE_INTERRUPT 형식을 사용합니다.

MINIPORT_SYNCHRONIZE_INTERRUPT MySynchronizeInterrupt;

그런 다음 다음과 같이 함수를 구현합니다.

_Use_decl_annotations_
BOOLEAN
 MySynchronizeInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

메시지 신호 인터럽 트에 대한 MiniportSynchronizeMessageInterrupt 함수를 정의하려면 다음 코드 예제와 같이 MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT 형식을 사용합니다.

MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT MySynchronizeMessageInterrupt;

그런 다음 다음과 같이 함수를 구현합니다.

_Use_decl_annotations_
BOOLEAN
 MySynchronizeMessageInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

MINIPORT_SYNCHRONIZE_INTERRUPTMINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT 함수 형식은 Ndis.h 헤더 파일에 정의되어 있습니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 함수 형식에 적용되는 주석이 사용되도록 합니다. 함수 선언 요구 사항에 대한 자세한 내용은 NDIS 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요.

Use_decl_annotations 대한 자세한 내용은 함수 동작 주석 지정을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
대상 플랫폼 Windows
헤더 ndis.h(Ndis.h 포함)
IRQL 설명 섹션을 참조하세요.

추가 정보

MiniportInetrrupt

MiniportInitializeEx

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx