Bagikan melalui


Rutinitas Pengiriman Opsional

Driver mungkin menyertakan rutinitas pengiriman berikut:

  • DispatchCleanup

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

  • DispatchQueryInformation, DispatchSetInformation

    Beberapa driver tingkat tertinggi mungkin harus memproses IRP_MJ_QUERY_INFORMATION dan IRP_MJ_SET_INFORMATION IRP. Permintaan tersebut menunjukkan bahwa aplikasi mode pengguna, komponen mode kernel, atau driver telah meminta informasi tentang panjang objek file (mewakili objek perangkat driver) di mana pemohon mode pengguna memiliki handle, atau bahwa pemohon mode pengguna mencoba mengatur tanda akhir file pada objek file tersebut.

    Driver perangkat serial dan kelas paralel 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 buffer-nya atau menghapus data cache ke perangkat, atau harus membuang data buffer atau cache yang dibaca dari perangkat.

    Misalnya, driver kelas sistem untuk keyboard dan 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. Rutin DispatchShutdown harus melakukan pembersihan yang dibutuhkan sesuai ketentuan driver sebelum manajer daya mengirimkan 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 dilapiskan di atasnya dapat mengandalkan driver sistem file tingkat tertinggi untuk mengirimkan mereka IRP shutdown ketika sistem hendak dimatikan. Artinya, FSD bertanggung jawab untuk memastikan bahwa setiap data file yang di-cache ditulis ke perangkat periferal, memanggil driver yang mendasar untuk menghapus 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 dilayerkan di atas driver yang menangani permintaan IRP_MJ_FLUSH_BUFFERS dan IRP_MJ_SHUTDOWN juga menyediakan prosedur DispatchShutdown dan DispatchFlushBuffers.