Menggunakan Avc.sys

Setelah Windows memuat dan menginisialisasi Avc.sys, Avc.sys menggunakan unit AV/C standar dan perintah subunit untuk menemukan subunit aktif di semua perangkat AV/C yang terhubung ke bus IEEE 1394 (termasuk subunit virtual saat komputer adalah unit AV/C virtual). Avc.sys kemudian menghasilkan pengidentifikasi perangkat (ID) untuk semua subunit aktif. Selanjutnya, Avc.sys menggunakan mekanisme Plug and Play standar (PnP) untuk memuat driver subunit yang sesuai untuk setiap subunit. Driver subunit yang akan dimuat dipilih berdasarkan file INF yang menginstal driver subunit, dan pengidentifikasi perangkat subunit, seperti yang dihasilkan oleh Avc.sys dan dijelaskan dalam ID Perangkat AV/C. Pengidentifikasi perangkat dihasilkan dari informasi unit perangkat AV/C, dalam kombinasi dengan bidang SubunitType dan SubunitID subunit . Driver yang mendukung subunit dapat spesifik vendor, atau dapat umum untuk jenis subunit. Misalnya, driver subunit untuk sebagian besar camcorder DV adalah Msdv.sysyang disediakan Microsoft.

Driver subunit berkomunikasi dengan Avc.sys melalui mekanisme standar berbasis IRP yang digunakan oleh semua driver berdasarkan arsitektur WDM. Driver subunit berkomunikasi dengan subunit AV/C-nya dengan mengalokasikan dan mengirim IRP ke tumpukan driver ke driver protokol AV/C, Avc.sys. Untuk membuat permintaan I/O, sertakan file header Avc.h, yang dikirim dengan Microsoft Windows Driver Kit (WDK).

Driver subunit mengalokasikan dan menginisialisasi RUN untuk diproses oleh Avc.sys. Driver subunit menetapkan anggota Parameters.DeviceIoControl.IoControlCode IRP ke IOCTL yang sesuai dengan operasi AV/C yang diinginkan.

Avc.sys mendaftarkan salah satu dari dua antarmuka perangkat, tergantung pada tumpukan driver subunit mana yang dimuat untuk didukung (peer atau virtual). Antarmuka ini menentukan fungsionalitas yang Avc.sys ekspor untuk driver subunit, driver lain, dan aplikasi yang akan digunakan. Avc.sys kemudian mengubah status antarmuka menjadi diaktifkan atau dinonaktifkan sesuai dengan status PnP driver.

Avc.sys mendaftarkan instans baru GUID_AVC_CLASS jika dimuat untuk memberikan dukungan untuk subunit AV/C eksternal (tumpukan serekan). Antarmuka ini hanya mendukung kode kontrol I/O (IOCTL) berikut:

IOCTL_AVC_CLASS pada gilirannya mendukung beberapa kode fungsi. Driver anak dari instans Avc.sys untuk mendukung subunit serekan dijamin memiliki akses ke antarmuka ini melalui objek perangkat induk mereka.

Antarmuka GUID_AVC_CLASS mendukung semua kode fungsi IOCTL_AVC_CLASS, meskipun beberapa memiliki batasan penggunaannya, seperti yang dijelaskan di halaman referensi untuk setiap fungsi.

Avc.sys mendaftarkan instans baru GUID_VIRTUAL_AVC_CLASS, jika dimuat, untuk memberikan dukungan untuk subunit AV/C virtual (tumpukan virtual). Antarmuka ini mendukung empat kode kontrol I/O (IOCTL):

Antarmuka GUID_VIRTUAL_AVC_CLASS tidak mendukung setiap kode fungsi IOCTL_AVC_CLASS. Halaman referensi untuk setiap kode fungsi individu menentukan apakah itu didukung untuk instans GUID_VIRTUAL_AVC_CLASSAvc.sys.

IOCTL_AVC_CLASS IRP hanya didukung dalam mode kernel (umumnya untuk komunikasi driver-ke-driver) melalui IRP_MJ_INTERNAL_DEVICE_CONTROL. Oleh karena itu, aplikasi tidak dapat langsung mengakses fungsi yang disediakan oleh kode IOCTL IOCTL_AVC_CLASS.

Tiga kode IOCTL terakhir didukung dalam mode kernel dan mode pengguna melalui IRP_MJ_DEVICE_CONTROL. Ini berarti bahwa aplikasi dapat mengirim IOCTL ini langsung ke Avc.sys.

Kode IOCTL IOCTL_AVC_CLASS harus selalu disertai dengan blok permintaan I/O (IRB), yang menjelaskan lebih lanjut operasi AV/C untuk dilakukan. Header IRB menyertakan nomor fungsi, yang menentukan struktur IRB lainnya. Struktur dan ukuran IRB bervariasi sesuai dengan fungsi. Avc.sys menggunakan dua IRB kustom:

Pilihan IRB mana yang harus digunakan driver subunit tergantung pada fungsi yang diinginkan. Untuk informasi selengkapnya tentang kode fungsi IOCTL_AVC_CLASS yang didukung oleh Avc.sys, lihat Kode Fungsi Driver Protokol AV/C.

Fungsi AV/C utama yang digunakan oleh driver subunit adalah AVC_FUNCTION_COMMAND, yang menggunakan struktur AVC_COMMAND_IRB. AVC_FUNCTION_COMMAND mengirim permintaan AV/C dan menerima respons AV/C yang sesuai. Detail untuk membangun perintah AV/C ditangani oleh Avc.sys, tetapi driver subunit harus menyediakan opcode AV/C dan operand dari setiap perintah.