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.
Minidriver menyediakan struktur KSPIN_DESCRIPTOR untuk setiap jenis pin yang akan diinstansiasi. Struktur deskriptor pin dikenal sebagai pabrik pin. Setiap pabrik pin dapat membuat instans pin satu atau beberapa jenis tertentu. Pabrik pin berisi beberapa array yang menjelaskan jenis pin yang diinisialisasi oleh deskriptor ini.
Minidriver menentukan satu atau beberapa kategori KS tempat pin yang dibuat oleh deskriptor ini termasuk dalam anggota Kategori KSPIN_DESCRIPTOR. KS menggunakan kategori untuk menghubungkan instance pin saat membangun grafik filter. Kueri properti KSPROPERTY_TOPOLOGY_CATEGORIES untuk array kategori fungsi yang didukung driver.
Minidriver menyediakan file INF yang mendaftarkan satu atau beberapa nama perangkat pin. Saat penginstalan, sistem operasi memuat nama dan kategori yang sesuai ke dalam registri sistem. Klien kemudian dapat melakukan panggilan create-file dengan nama perangkat ini untuk membuat instans pin.
Klien mode pengguna memanggil fungsi Win32 CreateFile dengan nama perangkat. Misalnya, "\\.\filters\audio\default renderer" bisa menjadi tautan ke perangkat audio yang telah dikonfigurasi untuk output default. Klien dalam mode kernel memanggil ZwCreateFile dari dalam mode kernel. Setelah rutinitas pembuatan file mengembalikan handel file, klien KS berkomunikasi dengan instans pin melalui Properti KS.
Dalam struktur deskriptor pin, minidriver menjabarkan array struktur KSPIN_INTERFACE dan struktur KSPIN_MEDIUM yang menentukan antarmuka dan media yang didukung oleh pabrik pin tersebut. KSPIN_DESCRIPTOR juga merupakan tempat minidriver menentukan rentang data yang valid untuk pin yang dibuat oleh pabrik tersebut. Ini dilakukan dengan menyediakan pointer ke struktur array KSDATARANGE. Minidriver juga menentukan arah data dan alur komunikasi untuk pin baru yang dibuat oleh pabrik pin ini.
Minidriver memungkinkan deteksi runtime terhadap pin factory dengan mendukung set properti KSPROPSETID_Pin.
Untuk membuat koneksi pin, panggil rutinitas KsCreatePin . Dalam panggilan ini, minidriver meneruskan penunjuk ke struktur jenis KSPIN_CONNECT yang menjelaskan koneksi yang diminta. Saat pin dibuat, filter melihat pin baru sebagai objek file bawahan dari objek file untuk filter tersebut.
Minidriver memanggil KsValidateConnectRequest dengan struktur deskriptor yang disediakan dalam IRP_MJ_CREATE yang dihasilkan. Rutinitas ini memvalidasi struktur ini dan mengembalikan penunjuk ke struktur koneksi dan objek file akar.
Minidriver menggunakan anggota DataFlow dan Communication dari struktur KSPIN_DESCRIPTOR untuk menentukan detail pin berikut:
Pin sumber IRP versus pin sink IRP
Pin sumber IRP mengeluarkan IRP; pin sink IRP menerimanya. Klien mode pengguna mengirimkan permintaan input/output (I/O) langsung ke pin penerima IRP melalui handle file yang relevan. Klien menggunakan KSPROPERTY_PIN_COMMUNICATION untuk memeriksa apakah data mengalir masuk atau keluar dari jenis pin.
Pin sumber data versus pin penerima data
Pin sumber data adalah pin output pada filter; pin sink data adalah pin input. Properti menjadi sumber atau penerima data tidak bergantung pada apakah itu adalah sumber atau penerima IRP. Misalnya, klien dapat menyambungkan sumber data, pin sink IRP ke sink data, pin sumber IRP. Klien menggunakan KSPROPERTY_PIN_DATAFLOW untuk memeriksa apakah data mengalir masuk atau keluar dari jenis pin.
Saat mengakhiri koneksi, handle pin sumber harus ditutup sebelum objek file yang mendasari dihancurkan. Jika pin sumber memanfaatkan sumber daya yang disediakan oleh pin sink, pin sink bertanggung jawab untuk memberi tahu sumber saat koneksi dihentikan.
Klien berinteraksi dengan pin streaming kernel dengan memanggil rutinitas DeviceIoControl (dijelaskan dalam dokumentasi Microsoft Windows SDK) dengan IRP_MJ_DEVICE_CONTROL. Pemanggil mengidentifikasi permintaannya oleh kode kontrol I/O yang diletakkannya di Parameters.DeviceIoControl.IoControlCode dalam struktur lokasi tumpukan I/O.
Untuk mendukung permintaan, minidriver menyediakan pointer ke struktur KSDISPATCH_TABLE dalam panggilan ke KsAllocateObjectHeader.
Permintaan tulis berisi penunjuk ke array struktur KSSTREAM_HEADER yang pada gilirannya berisi pointer untuk mengalirkan data. Permintaan baca berisi penunjuk ke array struktur header kosong tempat data yang dibaca harus dikembalikan.