DispatchDeviceControl dan DispatchInternalDeviceControl Routines

Rutinitas pengiriman driver (lihat DRIVER_DISPATCH) menangani IRP dengan kode fungsi I/O masing-masing IRP_MJ_DEVICE_CONTROL dan IRP_MJ_INTERNAL_DEVICE_CONTROL.

Untuk setiap jenis perangkat periferal yang umum, sistem mendefinisikan sekumpulan kode kontrol I/O untuk permintaan IRP_MJ_DEVICE_CONTROL . Driver baru untuk setiap jenis perangkat harus mendukung permintaan ini. Dalam kebanyakan kasus, kode kontrol I/O publik ini untuk setiap jenis perangkat tidak diekspor ke aplikasi mode pengguna.

Beberapa kode kontrol I/O yang ditentukan sistem ini digunakan oleh driver tingkat yang lebih tinggi yang membuat RUNPS untuk driver perangkat yang mendasar dengan memanggil IoBuildDeviceIoControlRequest. Yang lain digunakan oleh komponen Win32 untuk berkomunikasi dengan driver perangkat yang mendasar dengan memanggil fungsi Win32 DeviceIoControl (dijelaskan dalam dokumentasi Microsoft Windows SDK) yang, pada gilirannya, memanggil layanan sistem. Manajer I/O menyiapkan IRP, dan menyimpan kode fungsi utama IRP_MJ_DEVICE_CONTROL dan kode kontrol I/O yang diberikan dalam struktur IO_STACK_LOCATION di Parameters.DeviceIoControl.IoControlCode. Kemudian, manajer I/O memanggil rutinitas DispatchDeviceControl dari driver tingkat tertinggi dalam rantai.

Untuk driver tertentu yang disediakan sistem yang dirancang untuk beroperasi dengan dan mendukung driver baru, sistem operasi juga mendefinisikan satu set kode kontrol I/O untuk permintaan IRP_MJ_INTERNAL_DEVICE_CONTROL . Dalam kebanyakan kasus, kode kontrol I/O publik ini memungkinkan driver tingkat lebih tinggi add-on untuk beroperasi dengan driver perangkat yang mendasar.

Sebagai contoh, driver paralel yang disediakan sistem mendukung serangkaian kode kontrol I/O internal yang dikirim driver yang disediakan vendor dalam permintaan IRP_MJ_INTERNAL_DEVICE_CONTROL . Untuk informasi selengkapnya, lihat Permintaan Kontrol Perangkat Internal untuk Port Paralel dan Permintaan Kontrol Perangkat Internal untuk Perangkat Paralel.

Hampir semua operasi yang diminta melalui kode kontrol I/O yang ditentukan sistem menggunakan I/O yang di-buffer, karena jenis permintaan ini jarang memerlukan transfer data dalam jumlah besar. Artinya, bahkan driver yang mengatur objek perangkat mereka untuk I/O langsung dikirim IRP untuk permintaan kontrol perangkat dengan data yang akan ditransfer ke atau keluar dari buffer di Irp-AssociatedIrp.SystemBuffer> (kecuali untuk jenis driver perangkat tingkat tertinggi tertentu dengan driver multimedia Win32 yang digabungkan erat).

Selain itu, driver dapat menentukan serangkaian kode kontrol I/O privat yang dapat digunakan driver lain untuk berkomunikasi dengannya. Kode kontrol I/O publik baru dapat ditambahkan ke sistem hanya dengan kerja sama Microsoft Corporation, karena kode kontrol I/O publik dibangun ke dalam sistem operasi itu sendiri.

Untuk informasi spesifik tentang kumpulan kode kontrol I/O publik yang harus didukung oleh berbagai jenis driver dan tentang menentukan kode kontrol I/O privat, lihat bagian referensi khusus perangkat dari Windows Driver Kit (WDK).