ExXxxTimer 루틴 및 EX_TIMER 개체
Windows 8.1 시작하여 타이머를 관리하는 데 포괄적인 Ex Xxx타이머 루틴 집합을 사용할 수 있습니다. 이러한 루틴은 EX_TIMER 구조를 기반으로 하는 타이머 개체를 사용합니다. ExXxx타이머 루틴은 Windows 2000부터 사용할 수 있는 KeXxx타이머 루틴을 대체합니다. windows의 Windows 8.1 이상 버전에서만 실행하려는 드라이버는 Ke Xxx타이머 루틴 대신 ExXxx타이머 루틴을 사용할 수 있습니다. Windows 8.1 이상 버전의 Windows는 계속해서 KeXxx타이머 루틴을 지원합니다.
ExXxx타이머 루틴에는 KeXxx타이머 루틴에서 제공하는 모든 중요한 기능이 있습니다. 또한 ExXxx타이머 루틴은 Ke Xxx 타이머 루틴에서 지원되지 않는 두 가지 타이머 유형인 고해상도 타이머 및 절전 모드 해제 없음 타이머를 지원합니다. 고해상도 타이머는 시스템 클록의 기본 해상도로 정확도가 제한된 타이머보다 높은 정확도로 만료 시간을 지정할 수 있는 타이머입니다. 절전 모드 해제 타이머는 저전력 상태에서 프로세서를 불필요하게 절전 모드 해제하지 않도록 하는 타이머입니다. 자세한 내용은 아래 항목을 참조하세요.
Windows 8.1 시작하여 다음과 같은 ExXxx타이머 루틴을 사용할 수 있습니다.
ExSetTimer 루틴은 KeSetTimer 또는 KeSetTimerEx 루틴 대신 사용할 수 있습니다. ExCancelTimer 루틴은 KeCancelTimer 루틴 대신 사용할 수 있습니다.
ExAllocateTimer 및 ExDeleteTimer 루틴에는 직접 KeXxx타이머에 해당되는 항목이 없습니다. 이러한 두 루틴은 타이머 개체를 할당하고 해제합니다. 이 타이머 개체는 드라이버에 대한 멤버가 불투명한 시스템 할당 EX_TIMER 구조체입니다. 반면 KeXxx타이머 루틴에서 사용하는 타이머 개체는 드라이버 할당 KTIMER 구조체입니다. 드라이버는 KeInitializeTimer 또는 KeInitializeTimerEx 루틴을 호출하여 이 개체를 초기화합니다. ExAllocateTimer 는 할당하는 타이머 개체를 초기화합니다. ExDeleteTimer에 대한 자세한 내용은 System-Allocated 타이머 개체 삭제를 참조하세요.
EX_TIMER 및 KTIMER 구조체는 대기 가능한 개체입니다. 드라이버가 ExSetTimer, KeSetTimer 또는 KeSetTimerEx 를 호출하여 타이머를 설정한 후 드라이버는 KeWaitForSingleObject 또는 KeWaitForMultipleObjects 와 같은 루틴을 호출하여 타이머가 만료되기를 기다릴 수 있습니다. 타이머 개체는 타이머가 만료될 때 신호를 보냅니다. 옵션으로 드라이버는 타이머가 만료된 후 운영 체제에서 호출하는 드라이버 구현 ExTimerCallback 또는 CustomTimerDpc 콜백 루틴에 대한 포인터를 제공할 수 있습니다.
KeXxx타이머 루틴에는 ExXxx타이머 루틴에서 제공하지 않는 두 가지 기능이 있지만 대부분의 드라이버에서는 이러한 기능이 필요하지 않습니다.
먼저 KeXxx타이머 루틴에서 타이머 개체로 사용되는 KTIMER 구조체가 드라이버 할당됩니다. 드라이버는 리소스가 제한되고 메모리 할당이 실패할 수 있는 상황에서도 개체를 사용할 수 있도록 이 개체를 미리 할당할 수 있습니다. 반면, 리소스가 제한된 환경에서 는 ExAllocateTimer 를 호출하여 타이머 개체를 할당하지 못할 수 있습니다. 그러나 메모리 할당이 실패하는 환경에서 작동하도록 설계해야 하는 드라이버는 거의 없으며, 대부분의 드라이버는 타이머 개체를 할당하고 초기화하는 ExAllocateTimer 루틴의 편리성을 활용할 수 있습니다.
둘째, 타이머 개체가 신호 상태에 있는지 여부를 나타내는 KeReadStateTimer 루틴에 해당하는 ExXxx 타이머가 없습니다. 그러나 이 루틴은 거의 사용되지 않습니다. 필요한 경우 ExXxx타이머 루틴을 사용하는 드라이버는 드라이버가 ExAllocateTimer 루틴에 제공하는 ExTimerCallback 콜백 루틴에 의해 설정된 부울 값을 읽어 타이머 개체가 신호 상태에 있는지 여부를 검사 수 있습니다.