Bagikan melalui


Pin KS

Minidriver memasok struktur KSPIN_DESCRIPTOR untuk setiap jenis pin yang akan diinstansiasi. Struktur deskriptor pin dikenal sebagai pabrik pin. Setiap pabrik pin dapat membuat contoh satu atau beberapa instans pin dari jenis tertentu. Pabrik pin berisi beberapa array yang menjelaskan jenis pin yang digunakan 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 menyambungkan instans 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 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 mode kernel memanggil ZwCreateFile dari mode kernel. Setelah rutinitas buat 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 penunjuk ke array struktur KSDATARANGE . Minidriver juga menentukan arah aliran data dan komunikasi untuk pin baru yang dibuat oleh pabrik pin ini.

Minidriver memungkinkan penemuan run-time pabrik pin dengan mendukung kumpulan 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 subordinat objek file ke 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 Aliran Data dan Komunikasi 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 mengirim permintaan I/O langsung ke pin sink IRP melalui handel file yang relevan. Klien menggunakan KSPROPERTY_PIN_COMMUNICATION untuk memeriksa apakah data mengalir masuk atau keluar dari jenis pin.

  • Pin sumber data versus pin sink data

    Pin sumber data adalah pin output pada filter; pin sink data adalah pin input. Properti menjadi sumber data atau sink tidak bergantung pada sumber atau sink 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, handel pin sumber harus ditutup sebelum objek file yang mendasar dihancurkan. Jika pin sumber bergantung pada sumber daya yang disediakan oleh pin sink, pin sink bertanggung jawab untuk memberi tahu sumber ketika 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 dengan kode kontrol I/O yang diletakkannya di Parameters.DeviceIoControl.IoControlCode dalam struktur lokasi tumpukan I/O.

Untuk mendukung permintaan, minidriver memasok 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 baca harus dikembalikan.