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.
Jika driver menggunakan objek pengontrol, driver harus memanggil IoCreateController setelah membuat objek perangkat dan perangkatnya siap untuk I/O, biasanya setelah menerima permintaan PnP IRP_MN_START_DEVICE. Gambar berikut mengilustrasikan panggilan.
Setiap objek pengontrol memiliki ekstensi pengontrol terkait. Seperti yang ditunjukkan oleh gambar sebelumnya, pemanggil IoCreateController menentukan Ukuran ekstensi pengontrol. Struktur dan kontennya ditentukan driver.
Selain informasi status khusus dari perangkat apa pun yang dipertahankan oleh driver terkait pengontrol fisik (atau perangkat dengan saluran), gambar sebelum ini menunjukkan sekumpulan data representatif yang ditentukan oleh driver untuk ekstensi pengontrol.
pointer PtrToControllerObject, yang dikembalikan oleh IoCreateController, harus diteruskan dalam panggilan driver ke IoAllocateController dan IoFreeController, sebagaimana dijelaskan dalam Mengalokasikan Objek Pusat Kendali untuk Operasi I/O. Driver harus menyimpan penunjuk objek pengontrol yang dikembalikan di ekstensi perangkat dari objek perangkat yang dibuat oleh drivernya, atau di area penyimpanan residen lain yang dapat diakses oleh driver (memori non-terhalaman, yang dialokasikan oleh driver). Jika driver dibongkar, driver juga harus meneruskan penunjuk objek pengontrol ke IoDeleteController.
Sebagian besar driver yang menyiapkan objek pengontrol merasa nyaman untuk menyimpan penunjuk ke objek perangkat target atau ekstensi perangkat saat ini di ekstensi pengontrol. Biasanya, driver semacam itu menyimpan penunjuk objek pengontrol di setiap ekstensi perangkatnya, sehingga dapat menggunakan penunjuk ControllerObject->ControllerExtension untuk mengakses status khusus yang dikelola oleh driver mengenai operasi I/O untuk setiap objek perangkat target.
Jika pengontrol fisik yang diwakili oleh objek pengontrol menghasilkan gangguan, driver juga dapat menggunakan ekstensi pengontrol sebagai penyimpanan untuk penunjuk PtrToInterruptObject yang dikembalikan oleh IoConnectInterrupt. Untuk informasi selengkapnya, lihat Rutinitas Layanan Interupsi.
IoCreateController mengalokasikan penyimpanan memori tetap untuk objek dan ekstensi pengontrol, yang diinisialisasi dengan nol. Jika tidak dapat mengalokasikan memori, IoCreateController mengembalikan pointer NULL. Jika ini terjadi, driver harus gagal memulai perangkat dan harus mengembalikan STATUS_INSUFFICIENT_RESOURCES.