KePulseEvent 함수(ntddk.h)

KePulseEvent 루틴은 이벤트 개체를 신호 상태로 원자성으로 설정하고, 가능한 한 많은 대기 시간을 충족하려고 시도한 다음, 이벤트 개체를 신호되지 않은 상태로 다시 설정합니다.

구문

LONG KePulseEvent(
  [in, out] PRKEVENT  Event,
  [in]      KPRIORITY Increment,
  [in]      BOOLEAN   Wait
);

매개 변수

[in, out] Event

KEVENT 형식의 디스패처 개체에 대한 포인터입니다.

[in] Increment

이벤트를 펄스한 결과로 준비되는 스레드의 우선 순위에 적용할 승격을 지정합니다. 일반적으로 0으로 설정되지만 1로 설정할 수 있습니다.

[in] Wait

KePulseEvent 호출 바로 뒤에 KeWaitXxx 루틴 중 하나를 호출할지 여부를 나타내는 부울 값을 지정합니다. TRUE이면 KePulseEvent 호출 바로 뒤에 KeWaitForMultipleObjects, KeWaitForMutexObject 또는 KeWaitForSingleObject를 호출합니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

반환 값

이벤트 개체의 이전 신호 상태입니다.

설명

이벤트 개체에 대한 자세한 내용은 이벤트 개체를 참조하세요.

KePulseEvent 루틴은 일시적으로 IRQL을 발생시킬 수 있습니다. Wait 매개 변수가 FALSE이면 반환되기 전에 루틴은 호출을 시작할 때 가지고 있던 원래 값으로 IRQL을 복원합니다.

WAIT = TRUE이면 IRQL을 낮추지 않고 루틴이 반환됩니다. 이 경우 KePulseEvent 호출 바로 뒤에 KeWaitXxx 호출이 와야 합니다. 대기 = TRUE를 설정하면 호출자는 KePulseEvent 호출과 KeWaitXxx 호출 간에 불필요한 컨텍스트 전환이 발생하지 않도록 방지할 수 있습니다. KeWaitXxx 루틴은 반환되기 전에 KePulseEvent 호출을 시작할 때 IRQL을 원래 값으로 복원합니다. IRQL은 두 호출 간의 컨텍스트 전환을 사용하지 않도록 설정하지만 이러한 호출은 원자성 작업의 시작과 끝으로 안정적으로 사용할 수 없습니다. 예를 들어 이러한 두 호출 사이에 다른 프로세서에서 동시에 실행되는 스레드는 이벤트 개체 또는 대기 대상의 상태를 변경할 수 있습니다.

호출자가 IRQL = DISPATCH_LEVEL 또는 임의의 스레드 컨텍스트에서 실행되는 경우 KeWaitXxx에 대한 Timeout 매개 변수는 0이어야 합니다.

경고

이벤트를 기다리는 스레드가 현재 커널 APC를 실행 중인 경우 KePulseEvent가 호출될 때 이 스레드의 대기가 충족되지 않습니다. 커널 APC가 완료되면 스레드는 대기 상태로 유지됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 ntddk.h(Ntddk.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm)

추가 정보

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeSetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject