다음을 통해 공유


ExSetTimer 함수(wdm.h)

ExSetTimer 루틴은 타이머 작업을 시작하고 지정된 기한에 만료되도록 타이머를 설정합니다.

구문

BOOLEAN ExSetTimer(
  [in]           PEX_TIMER           Timer,
  [in]           LONGLONG            DueTime,
  [in]           LONGLONG            Period,
  [in, optional] PEXT_SET_PARAMETERS Parameters
);

매개 변수

[in] Timer

EX_TIMER 구조체에 대한 포인터입니다. 이 구조체는 ExAllocateTimer 루틴에 의해 이전에 할당된 타이머 개체입니다.

[in] DueTime

타이머가 만료되는 절대 또는 상대 시간입니다. DueTime 매개 변수의 값이 음수이면 만료 시간은 현재 시스템 시간을 기준으로 합니다. 그렇지 않으면 만료 시간이 절대입니다. 만료 시간은 시스템 시간 단위(100나노초 간격)로 표시됩니다. 절대 만료 시간은 시스템 시간의 변경 내용을 추적합니다. 상대 만료 시간은 시스템 시간 변경의 영향을 받지 않습니다. 절대 시간은 1601년 초부터 시스템 시간 단위로 경과된 시간으로 표현됩니다.

고해상도 타이머에 대한 DueTime 매개 변수는 상대 시간(음수 값) 또는 일상적인 버그 검사여야 합니다.

[in] Period

시스템 시간 단위(100나노초 간격)의 타이머에 대한 선택적 기간입니다. MAXLONG보다 작거나 같아야 합니다. 주기적이 아닌 원샷인 타이머의 경우 기간을 0으로 설정합니다.

[in, optional] Parameters

EXT_SET_PARAMETERS 구조체에 대한 포인터입니다. 이전에 이 구조를 초기 화하기 위해 ExInitializeSetTimerParameters 루틴이라고 하는 호출 드라이버입니다.

반환 값

이 루틴은 루틴이 호출되었을 때 보류 중인 타이머를 취소하면 TRUE 를 반환합니다. 그렇지 않으면 루틴이 FALSE를 반환 합니다. 자세한 내용은 설명 부분을 참조하세요.

설명

드라이버는 이 루틴을 호출하여 나중에 만료되도록 타이머를 설정할 수 있습니다. 그러면 드라이버가 타이머가 만료되기를 기다릴 수 있습니다. 또는 드라이버가 타이머가 만료되면 호출되는 콜백 루틴을 구현할 수 있습니다.

드라이버가 ExSetTimer를 호출한 후 드라이버는 KeWaitForSingleObject 또는KeWaitForMultipleObjects 와 같은 루틴을 호출하여 타이머가 만료되기를 기다릴 수 있습니다. 타이머가 만료되면 운영 체제는 타이머 개체에 신호를 보냅니다.

옵션으로 드라이버는 ExTimerCallback 콜백 루틴을 구현하고 이 루틴에 대한 포인터를 ExAllocateTimer 루틴에 대한 입력 매개 변수로 제공할 수 있습니다. 타이머가 만료되면 운영 체제는 ExTimerCallback 루틴을 호출합니다.

ExSetTimer 호출은 타이머에서 지정한 타이머 개체에 대해 이전에 시작된 모든 set-timer 작업을 암시적으로 취소합니다. 드라이버가 이전에 ExSetTimer 를 호출하여 타이머 를 사용하는 타이머를 설정하고 ExSetTimer 를 두 번째로 호출할 때 이 타이머가 아직 만료되지 않은 경우 두 번째 호출은 첫 번째 호출에서 타이머를 취소한 다음 새 타이머를 시작합니다. 이 경우 두 번째 호출은 TRUE를 반환 합니다. 그러나 첫 번째 호출로 시작된 타이머가 만료된 후 두 번째 호출이 이 타이머를 취소할 수 있는 경우 두 번째 호출은 새 타이머를 시작하고 FALSE를 반환합니다.

Period 매개 변수가 0이 아닌 경우 타이머는 주기적입니다. 주기적인 타이머의 경우 DueTime 매개 변수는 초기 타이머 만료 시간을 지정하고 Period 는 이후 만료 사이의 간격을 지정합니다.

시스템 클록에 사용되는 하드웨어 타이머는 일정한 간격으로 인터럽트 요청을 신호하지만 다른 디바이스에 대한 인터럽트 처리로 인해 이러한 인터럽트 처리가 지연될 수 있습니다. 따라서 주기적인 타이머의 경우 주기적인 만료 시간부터 타이머 개체가 신호를 받은 시간 또는 ExTimerCallback 루틴 실행까지의 지연은 한 기간에서 다음 기간으로 다를 수 있습니다. 자세한 내용은 타이머 정확도를 참조하세요.

주기적 타이머는 시스템 클록 틱당 두 번 이상 만료할 수 없습니다. 타이머 기간을 시스템 클록 틱 사이의 간격보다 작은 값으로 설정해도 타이머가 시스템 클록 틱당 두 번 이상 만료되지는 않지만 시스템 클록 속도가 변경될 경우 연속 만료 사이의 간격이 달라질 수 있습니다. 예를 들어 운영 체제는 고해상도 타이머의 타이밍 요구 사항을 충족하기 위해 시스템 클록 속도를 일시적으로 늘릴 수 있습니다. 자세한 내용은 고해상도 타이머를 참조하세요.

고해상도 타이머가 아닌 주기적 타이머의 경우 드라이버는 기간 을 시스템 클록 틱 사이의 기본 간격의 정수 배수로 설정하여 비교적 균일한 주기적 만료를 달성할 수 있습니다.

과도한 전력 소비를 방지하기 위해 드라이버는 장기 실행 고해상도 타이머의 기간을 시스템 클록 틱 사이의 기본 간격보다 작은 값으로 설정해서는 안 됩니다. 그렇지 않으면 시스템 클록 타이머는 허용되는 최대 시스템 클록 속도로 인터럽트(interrupts)를 지속적으로 생성합니다.

자세한 내용은 ExXxxTimer 루틴 및 EX_TIMER 개체를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8.1 사용하여 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 Ntoskrnl.lib
IRQL <= DISPATCH_LEVEL

추가 정보

EXT_SET_PARAMETERS

EX_TIMER

ExAllocateTimer

ExInitializeSetTimerParameters

ExTimerCallback

KeWaitForMultipleObjects

KeWaitForSingleObject