Mengirimkan Rutinitas dan IRQL
Sebagian besar rutinitas pengiriman driver dipanggil dalam konteks utas arbitrer di IRQL = PASSIVE_LEVEL, dengan pengecualian berikut:
Setiap rutinitas pengiriman driver tingkat tertinggi dipanggil dalam konteks utas yang berasal dari permintaan I/O, yang biasanya merupakan utas aplikasi mode pengguna.
Dengan kata lain, pengiriman rutinitas driver sistem file dan driver tingkat tertinggi lainnya dipanggil dalam konteks utas nonarbitrer di IRQL = PASSIVE_LEVEL.
Rutinitas DispatchRead, DispatchWrite, dan DispatchDeviceControl dari driver perangkat tingkat terendah, dan driver menengah yang berlapis di atasnya di jalur paging sistem, dapat dipanggil di IRQL = APC_LEVEL dan dalam konteks utas arbitrer.
Rutinitas DispatchRead dan/atau DispatchWrite , dan rutinitas lain yang juga memproses permintaan baca dan/atau tulis di perangkat tingkat terendah atau driver perantara, harus residen setiap saat. Rutinitas driver ini tidak dapat dipaginasi atau menjadi bagian dari bagian gambar yang dapat dipertanyakan driver; mereka tidak boleh mengakses memori yang dapat diperkirakan. Selain itu, mereka tidak boleh bergantung pada panggilan pemblokiran apa pun (seperti KeWaitForSingleObject dengan batas waktu nonzero).
Rutinitas Driver DispatchPower di jalur hibernasi dan/atau halaman dapat dipanggil di IRQL = DISPATCH_LEVEL. Rutinitas DispatchPnP dari driver tersebut harus siap untuk menangani permintaan PnP IRP_MN_DEVICE_USAGE_NOTIFICATION .
Rutinitas Driver DispatchPower yang memerlukan daya inrush saat start-up dapat dipanggil di IRQL = DISPATCH_LEVEL.
Untuk informasi tambahan, lihat Mengelola Prioritas Perangkat Keras.