Menghapus Objek Timer System-Allocated

Dimulai dengan Windows 8.1, rutinitas ExDeleteTimer menghapus objek timer yang dibuat oleh rutinitas ExAllocateTimer. Objek timer ini adalah struktur EX_TIMER yang dialokasikan sistem yang anggotanya buram untuk driver. Sebelum objek timer dihapus, ExDeleteTimer menonaktifkan operasi timer lebih lanjut pada objek, dan membatalkan atau menyelesaikan operasi yang tertunda pada objek yang mungkin sedang berlangsung.

Setelah driver memanggil ExDeleteTimer, rutinitas ini mengambil beberapa langkah untuk memastikan bahwa driver dapat menghapus objek timer dengan aman. Pertama, ExDeleteTimer menandai objek timer sebagai dinonaktifkan untuk mencegah driver memulai operasi timer baru yang menggunakan objek . Setelah objek timer dinonaktifkan, panggilan ke rutinitas ExSetTimer atau ExCancelTimer segera mengembalikan FALSE dan tidak melakukan operasi. Selain itu, panggilan kedua ke ExDeleteTimer mengembalikan FALSE dan tidak melakukan operasi.

Selanjutnya, ExDeleteTimer memeriksa apakah timer masih tertunda dari panggilan sebelumnya ke ExDeleteTimer. Menonaktifkan objek pengatur waktu tidak membatalkan timer yang diatur sebelum objek dinonaktifkan. Dalam salah satu dari dua kasus berikut, timer yang sebelumnya diatur mungkin kedaluwarsa setelah objek timer dinonaktifkan:

  • Timer berkala.
  • Timer adalah satu bidikan (atau nonperiodic) dan belum kedaluwarsa.

Timer berkala tidak pernah dapat kedaluwarsa lebih dari sekali setelah objek timer dinonaktifkan.

Jika driver Anda menerapkan rutinitas panggilan balik ExTimerCallback , parameter Timer untuk rutinitas ini dijamin akan selalu menjadi penunjuk yang valid ke objek timer (struktur EX_TIMER ), bahkan jika timer kedaluwarsa setelah objek timer dinonaktifkan.

Jika tidak ada timer yang tertunda, ExDeleteTimer akan menghapus objek timer dan mengembalikan tanpa menunggu.

Jika timer tertunda saat ExDeleteTimer dipanggil, nilai parameter Bataldan Tunggu yang disediakan driver Anda ke kontrol rutin perilaku rutin ini. Parameter Batal memberi tahu ExDeleteTimer apakah akan mencoba membatalkan timer yang tertunda. Parameter Tunggu memberi tahu ExDeleteTimer apakah akan menunggu untuk kembali hingga objek timer dihapus.

Jika BatalFALSE (dalam hal ini, Tunggu harus FALSE) dan timer tertunda, ExDeleteTimer memungkinkan timer kedaluwarsa sebelum objek timer dihapus. Dalam hal ini, ExDeleteTimer menandai objek timer untuk menunjukkan bahwa objek tersebut akan dihapus setelah timer yang tertunda kedaluwarsa (dan panggilan balik terakhir ke rutinitas ExTimerCallback selesai). Kemudian ExDeleteTimer kembali tanpa menunggu timer selesai kedaluwarsa atau agar objek dihapus.

Jika Bataltrue, ExDeleteTimer mencoba membatalkan timer yang tertunda sebelum kedaluwarsa. ExDeleteTimer mengembalikan TRUE jika berhasil membatalkan timer. ExDeleteTimer mengembalikan FALSE jika tidak dapat membatalkan timer, yang merupakan kasus untuk timer satu bidikan yang telah kedaluwarsa atau sedang dalam proses kedaluwarsa. ExDeleteTimer juga mengembalikan FALSE jika timer (satu bidikan atau berkala) dibatalkan sebelum panggilan ExDeleteTimer atau jika timer tidak pernah diatur.

Jika BatalTRUE dan TungguFALSE, ExDeleteTimer tidak pernah memblokir utas panggilan. Jika objek timer tidak dapat segera dihapus, ExDeleteTimer menandai objek timer untuk menunjukkan bahwa objek tersebut akan dihapus setelah timer yang tertunda selesai kedaluwarsa, dan segera kembali tanpa menunggu timer kedaluwarsa atau agar objek dihapus.

Jika Batal dan Tunggubenar, ExDeleteTimer memblokir utas panggilan jika objek timer tidak dapat segera dihapus. ExDeleteTimer menunggu, jika perlu, agar timer selesai kedaluwarsa dan agar panggilan balik apa pun ke rutinitas ExTimerCallback yang diterapkan driver selesai. Selanjutnya, ExDeleteTimer menghapus objek timer dan memanggil rutinitas ExTimerDeleteCallback , jika driver menerapkan rutinitas ini. Akhirnya, ExDeleteTimer kembali.

Driver dapat memanggil ExDeleteTimer dari rutinitas ExTimerCallback driver, yang berjalan di IRQL = DISPATCH_LEVEL, tetapi driver harus mengatur parameter Tunggu dalam panggilan ini ke FALSE.

Sebagai opsi, driver dapat menerapkan rutinitas panggilan balik ExTimerDeleteCallback yang berjalan setelah objek timer dihapus. Biasanya, rutinitas ExTimerDeleteCallback membebaskan sumber daya sistem apa pun yang dialokasikan driver untuk digunakan dengan objek timer.

ExDeleteTimer menjadwalkan rutinitas ExTimerDeleteCallback yang diterapkan driver untuk dijalankan setelah objek timer dihapus, pada saat itu penunjuk ke objek ini tidak lagi valid. Jika parameter WaitTRUE dalam panggilan ExDeleteTimer , panggilan balik ke rutinitas ExTimerDeleteCallback selesai sebelum ExDeleteTimer kembali. Jika Waitadalah FALSE, rutinitas ExTimerDeleteCallback mungkin berjalan sebelum atau sesudah ExDeleteTimer kembali.

Untuk informasi selengkapnya, lihat ExXxxTimer Routines dan EX_TIMER Objects.