KeSynchronizeExecution 함수(wdm.h)

KeSynchronizeExecution 루틴은 지정된 루틴의 실행을 하나 이상의 인터럽트 개체 집합에 할당된 ISR(인터럽트 서비스 루틴)과 동기화합니다.

구문

BOOLEAN KeSynchronizeExecution(
  [in, out]      PKINTERRUPT            Interrupt,
  [in]           PKSYNCHRONIZE_ROUTINE  SynchronizeRoutine,
  [in, optional] __drv_aliasesMem PVOID SynchronizeContext
);

매개 변수

[in, out] Interrupt

인터럽트 개체 집합에 대한 포인터입니다. 호출자는 IoConnectInterrupt 또는 IoConnectInterruptEx 루틴에서 이 포인터 얻었습니다.

[in] SynchronizeRoutine

실행이 인터럽트 개체에 할당된 ISR의 실행과 동기화될 호출자 제공 SynchCritSection 루틴을 지정합니다.

[in, optional] SynchronizeContext

호출될 때 SynchCritSection 루틴에 전달할 호출자 제공 컨텍스트 값에 대한 포인터입니다.

반환 값

작업이 성공하면 KeSynchronizeExecutionTRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다.

설명

이 루틴이 호출되면 다음이 발생합니다.

  1. IRQL은 IoConnectInterrupt 또는 IoConnectInterruptEx 호출에 지정된 SynchronizeIrql으로 발생합니다.
  2. SynchronizeContext에 대한 액세스는 연결된 인터럽트 개체 스핀 잠금(또는 PASSIVE_LEVEL 실행되는 ISR의 경우 시스템 이벤트 개체)을 획득하여 할당된 ISR과 동기화됩니다.
  3. 지정된 SynchCritSection 루틴은 SynchronizeContext 값을 매개 변수로 사용하여 호출됩니다.
ISR이 DIRQL >= DISPATCH_LEVEL 실행되는 경우 SynchCritSection 루틴은 동일한 DIRQL에서 실행되므로 우선 순위가 높은 다른 작업이 지연되지 않도록 가능한 한 짧은 시간 동안 실행해야 합니다.

KeSynchronizeExecution의 호출자는 IRQL = DIRQL<에서 실행되어야 합니다. 즉, 호출자가 ISR을 IoConnectInterrupt 또는 IoConnectInterruptEx에 등록할 때 지정한 SynchronizeIrql 값보다 작거나 같은 IRQL에서 실행해야 합니다.

Windows 8 시작하여 드라이버는 KeSynchronizeExecution을 호출하여 SynchCritSection 루틴의 실행을 IRQL = PASSIVE_LEVEL 실행되는 ISR과 동기화할 수 있습니다. 이전 버전의 Windows에서 KeSynchronizeExecution 은 IRQL >= DISPATCH_LEVEL 실행되는 ISR과만 실행을 동기화할 수 있습니다. 자세한 내용은 Passive-Level 인터럽트 서비스 루틴 사용을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DIRQL(설명 섹션 참조)

추가 정보

IoConnectInterrupt

IoConnectInterruptEx