Bagikan melalui


DispatchDeviceControl dan DispatchInternalDeviceControl Routines

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

Untuk setiap jenis perangkat periferal 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 didefinisikan oleh sistem ini digunakan oleh driver tingkat tinggi yang membuat IRP untuk driver perangkat yang mendasari 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 oleh sistem, yang dirancang untuk beroperasi dengan driver baru dan mendukungnya, sistem operasi juga mendefinisikan serangkaian kode kontrol I/O untuk permintaan IRP_MJ_INTERNAL_DEVICE_CONTROL. Dalam kebanyakan kasus, kode kontrol I/O publik ini memungkinkan driver tingkat tinggi tambahan untuk bekerja sama dengan driver perangkat yang mendasar.

Sebagai contoh, driver paralel yang disediakan oleh sistem mendukung serangkaian kode kontrol I/O internal yang dikirim oleh driver yang disediakan vendor dalam permintaan IRP_MJ_INTERNAL_DEVICE_CONTROL. Untuk informasi selengkapnya, lihat Panduan Desain Driver 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 dikirimkan IRP untuk permintaan kontrol perangkat, di mana data akan ditransfer ke dalam atau keluar dari buffer di Irp-AssociatedIrp.SystemBuffer> (kecuali untuk jenis driver perangkat tingkat tertinggi tertentu dengan driver multimedia Win32 yang dipasangkan 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).