Kapan Harus Memeriksa Lokasi Tumpukan I/O Driver

Kode fungsi I/O utama diatur di lokasi tumpukan I/O driver untuk setiap IRP yang masuk.

Rutinitas pengiriman driver harus memeriksa lokasi tumpukan I/O driver untuk IRP guna menentukan apa yang harus dilakukan jika salah satu kondisi berikut menahan:

  • Rutinitas pengiriman menangani lebih dari satu kode fungsi I/O utama.

  • Rutinitas pengiriman harus menangani sekumpulan kode fungsi minor untuk kode fungsi utama tertentu. IRP dengan kode fungsi kecil termasuk IRP_MJ_PNP dan IRP_MJ_POWER, serta IRP tertentu yang harus ditangani driver port SCSI dan driver sistem file.

  • Rutinitas pengiriman driver perangkat atau driver tingkat yang lebih tinggi yang digabungkan erat menangani permintaan IRP_MJ_DEVICE_CONTROL atau IRP_MJ_INTERNAL_DEVICE_CONTROL , yang memiliki sekumpulan kode kontrol I/O terkait.

Untuk mendapatkan pointer ke lokasi tumpukan I/O driver, rutinitas pengirimannya memanggil IoGetCurrentIrpStackLocation.

Rutinitas pengiriman driver tingkat lebih tinggi selalu memanggil IoGetCurrentIrpStackLocation dan juga memanggil IoGetNextIrpStackLocation untuk mendapatkan penunjuk ke lokasi tumpukan I/O driver yang lebih rendah berikutnya untuk IRP yang mereka siapkan untuk driver yang lebih rendah berikutnya, saat melewati RUNP ke tumpukan driver.

Rutinitas DispatchDeviceControl atau Rutinitas DispatchInternalDeviceControl dari driver perangkat, atau mungkin driver kelas yang digabungkan erat, harus menentukan kode kontrol I/O mana yang diatur di lokasi tumpukan I/O driver di Parameters.DeviceIoControl.IoControlCode untuk setiap permintaan. Kode kontrol I/O terkandung dalam lokasi tumpukan I/O driver.

Dalam kebanyakan kasus, rutinitas DispatchDeviceControl atau DispatchInternalDeviceControl dari driver tingkat yang lebih tinggi hanya meneruskan permintaan IRP_MJ_DEVICE_CONTROL atau IRP_MJ_INTERNAL_DEVICE_CONTROL ke driver yang lebih rendah berikutnya, setelah mengatur lokasi tumpukannya di IRP. Namun, driver kelas SCSI harus memeriksa kode kontrol I/O Port SCSI tertentu sehingga mereka dapat mengatur lokasi tumpukan I/O driver port SCSI dengan benar sebelum meneruskan permintaan ini.