Bagikan melalui


Rutinitas ExXxxTimer dan Objek EX_TIMER

Dimulai dengan Windows 8.1, serangkaian rutinitas Timer ExXxx yang komprehensif tersedia untuk mengelola timer. Rutinitas ini menggunakan objek timer yang didasarkan pada struktur EX_TIMER . Rutinitas ExXxxTimer adalah pengganti rutinitas Timer KeXxx, yang tersedia dimulai dengan Windows 2000. Driver yang dimaksudkan untuk berjalan hanya pada windows versi Windows 8.1 dan yang lebih baru dapat menggunakan rutinitas Timer ExXxx alih-alih rutinitas Timer KeXxx. Windows 8.1 dan versi Windows yang lebih baru terus mendukung rutinitas Timer KeXxx.

Rutinitas ExXxxTimer memiliki semua kemampuan penting yang disediakan oleh rutinitas Timer KeXxx. Selain itu, rutinitas ExXxxTimer mendukung dua jenis timer, timer resolusi tinggi dan timer tanpa bangun, yang tidak didukung oleh rutinitas Timer KeXxx. Timer resolusi tinggi adalah timer yang waktu kedaluwarsanya dapat ditentukan dengan akurasi yang lebih tinggi daripada timer yang akurasinya dibatasi oleh resolusi default jam sistem. Timer tanpa bangun adalah timer yang menghindari prosesor yang tidak perlu bangun dari status berdaya rendah. Untuk informasi selengkapnya, lihat topik berikut:

Timer Resolusi Tinggi

Timer Tanpa Bangun

Dimulai dengan Windows 8.1, rutinitas ExXxxTimer berikut tersedia:

ExAllocateTimer

ExSetTimer

ExCancelTimer

ExDeleteTimer

Rutinitas ExSetTimer dapat digunakan alih-alih rutinitas KeSetTimer atau KeSetTimerEx . Rutinitas ExCancelTimer dapat digunakan alih-alih rutinitas KeCancelTimer .

Rutinitas ExAllocateTimer dan ExDeleteTimer tidak memiliki rekan Timer KeXxx langsung. Kedua rutinitas ini mengalokasikan dan membebaskan objek timer. Objek timer ini adalah struktur EX_TIMER yang dialokasikan sistem yang anggotanya buram untuk driver. Sebaliknya, objek timer yang digunakan oleh rutinitas Timer KeXxx adalah struktur KTIMER yang dialokasikan driver. Driver memanggil rutinitas KeInitializeTimer atau KeInitializeTimerEx untuk menginisialisasi objek ini. ExAllocateTimer menginisialisasi objek timer yang dialokasikannya. Untuk informasi selengkapnya tentang ExDeleteTimer, lihat Menghapus Objek Timer System-Allocated.

struktur EX_TIMER dan KTIMER adalah objek yang dapat ditunggu. Setelah driver memanggil ExSetTimer, KeSetTimer, atau KeSetTimerEx untuk mengatur timer , driver dapat memanggil rutinitas seperti KeWaitForSingleObject atau KeWaitForMultipleObjects untuk menunggu timer kedaluwarsa. Objek timer disinyalkan ketika timer kedaluwarsa. Sebagai opsi, driver dapat menyediakan pointer ke rutinitas panggilan balik ExTimerCallback atau CustomTimerDpc yang diimplementasikan driver yang dipanggil sistem operasi setelah timer kedaluwarsa.

Rutinitas Timer KeXxx memiliki dua kemampuan yang tidak disediakan oleh rutinitas ExXxxTimer, tetapi kemampuan ini tidak diperlukan oleh sebagian besar driver.

Pertama, struktur KTIMER yang digunakan sebagai objek timer oleh rutinitas Timer KeXxx dialokasikan driver. Driver dapat melakukan pra-alokasi objek ini untuk memastikan bahwa objek tersedia bahkan dalam keadaan di mana sumber daya dibatasi dan alokasi memori dapat gagal. Sebaliknya, panggilan ke ExAllocateTimer untuk mengalokasikan objek timer mungkin gagal di lingkungan yang dibatasi sumber daya. Namun, beberapa driver perlu dirancang untuk beroperasi di lingkungan di mana alokasi memori gagal, dan sebagian besar driver mendapat manfaat dari kenyamanan rutinitas ExAllocateTimer yang mengalokasikan dan menginisialisasi objek timer.

Kedua, tidak ada ExXxxTimer yang setara dengan rutinitas KeReadStateTimer , yang menunjukkan apakah objek timer berada dalam status sinyal. Namun, rutinitas ini jarang digunakan. Jika perlu, driver yang menggunakan rutinitas ExXxxTimer dapat memeriksa apakah objek timer berada dalam status sinyal dengan membaca nilai Boolean yang ditetapkan oleh rutinitas panggilan balik ExTimerCallback yang disediakan driver ke rutinitas ExAllocateTimer .