Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Banyak driver, terutama driver tingkat bawah dalam rantai driver berlapis, hanya perlu memastikan eksistensi mereka setelah penerimaan permintaan buat dan hanya perlu mengonfirmasi penerimaan atas permintaan tutup.
Misalnya, driver port untuk pengontrol perangkat yang memiliki satu atau lebih driver kelas yang saling berkaitan erat dan memanggil IoGetDeviceObjectPointer mungkin memiliki rutinitas DispatchCreateClose yang minimal. Rutinitas ini mungkin tidak melakukan lebih dari menyelesaikan IRP berikut ini:
: :
{
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
Rutinitas minimal DispatchCreateClose ini mengatur anggota data Informasi dari blok status I/O ke nol, menunjukkan bahwa objek file dibuka untuk permintaan pembuatan; Informasi tidak memiliki arti untuk permintaan penutupan. Rutinitas mengatur anggota Status ke STATUS_SUCCESS dan juga mengembalikan nilai status ini, menunjukkan bahwa driver siap untuk menerima permintaan I/O.
Rutinitas DispatchCreateClose minimal ini menyelesaikan pembuatan IRP tanpa meningkatkan prioritas pencetus IRP (IO_NO_INCREMENT), karena pencetus diasumsikan menunggu interval yang tidak ditentukan tetapi sangat kecil agar permintaan selesai.
Berapa banyak pekerjaan yang dilakukan rutinitas DispatchCreateClose sebagian tergantung pada sifat perangkat driver atau perangkat yang mendasar dan sebagian pada desain driver. Jika driver melakukan operasi yang sangat berbeda untuk membuat dan menutup permintaan, driver harus menangani permintaan ini dalam rutinitas DispatchCreate dan DispatchClose terpisah.
Untuk menangani permintaan buat untuk membuka objek file yang mewakili perangkat logis atau fisik, driver tingkat tertinggi harus melakukan hal berikut:
Panggil IoGetCurrentIrpStackLocation untuk mendapatkan pointer ke lokasi tumpukan I/O-nya di IRP.
Periksa FileObject. FileName di lokasi tumpukan I/O dan selesaikan IRP dengan STATUS_SUCCESS jika string Unicode di FileName memiliki panjang nol; jika tidak, selesaikan IRP dengan STATUS_INVALID_PARAMETER.
Mengikuti langkah-langkah sebelumnya memastikan bahwa tidak ada upaya untuk membuka pseudofile pada perangkat yang dapat menyebabkan masalah nanti. Misalnya, ini mencegah upaya untuk membuka \\device\parallel0\temp.dat yang tidak ada.