Rutinitas Pengiriman Opsional

Driver mungkin menyertakan rutinitas pengiriman berikut:

  • DispatchCleanup

    IRP_MJ_CLEANUP menunjukkan bahwa handel terakhir untuk objek file yang terkait dengan objek perangkat target sedang ditutup. Permintaan I/O yang luar biasa untuk objek file mungkin masih ada. Driver dapat menerapkan rutinitas DispatchCleanup untuk melakukan pembersihan yang tidak spesifik untuk handel file tertentu. Driver juga dapat menggunakan rutinitas DispatchClose mereka untuk tujuan yang sama.

  • DispatchQueryInformation, DispatchSetInformation

    Beberapa driver tingkat tertinggi mungkin harus memproses runtime integrasi IRP_MJ_QUERY_INFORMATION dan IRP_MJ_SET_INFORMATION . Permintaan tersebut menunjukkan bahwa aplikasi mode pengguna, komponen mode kernel, atau driver telah meminta informasi tentang panjang objek file (mewakili objek perangkat driver) yang ditangani pemohon mode pengguna, atau bahwa pemohon mode pengguna mencoba mengatur akhir file pada objek file tersebut.

    Driver kelas paralel dan perangkat serial menangani permintaan ini dengan mengatur panjang atau posisi FILE_STANDARD_INFORMATION atau FILE_POSITION_INFORMATION ke nol. Driver perangkat tingkat tertinggi lainnya harus mendukung permintaan ini, terutama jika aplikasi mode pengguna atau driver mode kernel mungkin memanggil fungsi runtime C untuk memanipulasi objek file. Driver sistem file harus mendukung permintaan ini lebih sepenuhnya daripada driver perangkat tingkat tertinggi ini.

  • DispatchFlushBuffers

    Driver yang menyimpan data dalam perangkat atau buffer data secara internal dalam memori yang dialokasikan driver mungkin menerima IRP_MJ_FLUSH_BUFFERS. Tanda terima permintaan ini menunjukkan bahwa driver harus menulis data yang di-buffer atau menghapus data yang di-cache ke perangkat, atau harus membuang data yang di-buffer atau di-cache yang dibaca dari perangkat.

    Misalnya, keyboard sistem dan driver kelas mouse, yang memiliki buffer cincin internal untuk data input dari perangkat mereka, mendukung permintaan flush. Driver perangkat penyimpanan massal dan driver yang berlapis di atasnya juga mendukung permintaan ini.

  • DispatchShutdown

    Setiap driver yang kemungkinan akan dipanggil sebelum sistem dimatikan harus menangani IRP_MJ_SHUTDOWN. Rutinitas DispatchShutdown harus melakukan pembersihan apa pun yang ditentukan driver diperlukan sebelum manajer daya mengirim IRP set-power sistem untuk mematikan sistem. Driver dapat memanggil IoRegisterShutdownNotification atau IoRegisterLastChanceShutdownNotification untuk mendaftar pemberitahuan matikan.

Driver untuk perangkat penyimpanan massal dan driver perantara yang berlapis di atasnya dapat mengandalkan driver sistem file tingkat tertinggi untuk mengirimi mereka runtime integrasi shutdown ketika sistem akan dimatikan. Artinya, FSD bertanggung jawab untuk memastikan bahwa setiap data file yang di-cache ditulis ke perangkat periferal, memanggil driver yang mendasar untuk membersihkan data dari cache atau buffer perangkat mereka (jika ada), dan sebagainya sebelum sistem dimatikan.

Driver perangkat penyimpanan massal yang menyimpan data secara internal harus menyediakan rutinitas DispatchShutdown dan DispatchFlushBuffers . Jika driver penyimpanan massal menyangga data dalam memori tetapi perangkatnya tidak memiliki cache internal, itu juga harus menyediakan rutinitas DispatchShutdown dan DispatchFlushBuffers .

Setiap driver perantara yang berlapis di atas driver yang menangani permintaan IRP_MJ_FLUSH_BUFFERS dan IRP_MJ_SHUTDOWN juga menyediakan rutinitas DispatchShutdown dan DispatchFlushBuffers .