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는 NDIS가 NdisMSynchronizeWithInterruptEx에서 반환할 때 동일한 값을 반환합니다.

설명

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

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

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

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

예제

MiniportSynchronizeInterrupt 함수를 정의하려면 먼저 정의 중인 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows 드라이버에 대한 함수 형식 집합을 제공합니다. 함수 형식을 사용하여 함수를 선언하면 드라이버, SDV(정적 드라이버 검증 도구) 및 기타 확인 도구에 대한 Code Analysis 오류를 찾는 데 도움이 되며 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