Bagikan melalui


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.