Menonaktifkan APC

Sistem ini menyediakan tiga mekanisme untuk menonaktifkan APC untuk utas saat ini:

  • Wilayah kritis. Ketika utas berada di dalam wilayah penting, APC pengguna dan APC kernel normalnya tidak dijalankan. APC kernel khusus masih dijalankan. Untuk informasi selengkapnya tentang jenis APC ini, lihat Jenis APC.

  • Wilayah yang dijaga. Ketika utas berada di dalam wilayah yang dijaga, tidak ada APC-nya yang dijalankan.

  • Meningkatkan IRQL saat ini ke APC_LEVEL atau lebih tinggi. Utas yang dijalankan di IRQL >= APC_LEVEL dijalankan dengan semua APC dinonaktifkan.

Perhatikan bahwa pengaturan ini berlaku untuk utas saat ini dan tidak memengaruhi perilaku utas lainnya.

Beberapa rutinitas dukungan driver harus dipanggil dengan jenis APC tertentu yang dinonaktifkan. Misalnya, rutinitas yang memperoleh sumber daya eksekutif (seperti ExAcquireResourceSharedLite) harus dipanggil dengan APC kernel normal dinonaktifkan. Rutinitas lain harus dipanggil dengan jenis APC tertentu yang diaktifkan. Misalnya, rutinitas apa pun yang bergantung pada rutinitas penyelesaian I/O (seperti IoVolumeDeviceToDosName) harus dipanggil dengan APC kernel khusus diaktifkan. Dokumentasi untuk setiap rutinitas menentukan apakah rutinitas memiliki batasan tertentu pada status eksekusi APC.

Driver dapat secara eksplisit memasuki wilayah kritis atau dijaga dengan memanggil rutinitas yang sesuai. Untuk informasi selengkapnya, lihat Wilayah Penting dan Wilayah yang Dijaga. Driver juga dapat secara eksplisit meningkatkan IRQL saat ini ke APC_LEVEL dengan memanggil KeRaiseIrql. Driver kemudian harus menurunkan IRQL ke nilai aslinya dengan memanggil KeLowerIrql. Menggunakan wilayah yang dijaga lebih cepat daripada menaikkan dan menurunkan IRQL saat ini, tetapi wilayah yang dijaga hanya tersedia di Windows Server 2003 dan versi Windows yang lebih baru.

Operasi mutex berikut memiliki efek yang sama seperti memasuki atau meninggalkan wilayah kritis atau terjaga atau menaikkan atau menurunkan IRQL saat ini:

  • Memegang objek mutex secara implisit menempatkan pemegang dalam wilayah kritis.

  • Memegang muteks yang dijaga secara implisit menempatkan pemegang dalam wilayah yang dijaga.

  • Memegang mutex cepat secara implisit meningkatkan IRQL saat ini ke APC_LEVEL.

Untuk informasi selengkapnya tentang objek mutex, lihat Objek Mutex. Untuk informasi selengkapnya tentang mutex yang cepat dan terjaga, lihat Mutex Cepat dan Mutex Terjaga.