다음을 통해 공유


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 루틴에 전달될 호출자 제공 컨텍스트 값에 대한 포인터입니다.

반환 값

KeSynchronizeExecution 작업이 성공하면 TRUE 반환합니다. 그렇지 않으면 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