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.
Filter yang memerlukan alokator untuk memori on-board atau metode penyimpanan dependen perangkat lainnya dapat menyediakan alokator tertentu dengan mendukung properti dan metode alokator. Untuk informasi selengkapnya, lihat KSPROPERTY_STREAM_ALLOCATOR.
Filter menerima IRP_MJ_CREATE dengan tipe KSCREATE_REQUEST_ALLOCATOR yang menentukan opsi pembingkaian untuk alokator. Rutinitas pembuatan alokator minidriver memvalidasi permintaan buat dengan memanggil KsValidateAllocatorCreateRequest. Jika panggilan berhasil, rutinitas ini mengembalikan penunjuk ke struktur KSALLOCATOR_FRAMING yang relevan.
Jika filter tidak dapat memenuhi persyaratan pembingkaian, filter mengembalikan kode kegagalan sebagai respons terhadap IRP. Jika tidak, filter menghubungkan penunjuk ke struktur pada anggota FsContext dari objek berkas dan melayani permintaan alokator yang dihasilkan.
Jika buffer yang diteruskan ke antarmuka streaming harus dimodifikasi secara langsung oleh filter, klien mode pengguna mengatur flag KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER pada struktur KSALLOCATOR_FRAMING yang relevan.
Ada dua antarmuka yang tersedia untuk alokator. Pertama, semua alokator harus mendukung KSMETHODSETID_StreamAllocator berbasis IRP. Alokator yang menggunakan mekanisme ini terbatas pada jumlah maksimum bingkai yang dialokasikan. Permintaan untuk mengalokasikan "frame" di luar batas ini akan ditandai sebagai tertunda.
Kedua, minidriver dapat mendukung akses ke tabel fungsi jika jenis kumpulan alokasi dapat diproses pada DISPATCH_LEVEL. Menyediakan akses tabel fungsi bersifat opsional. Lakukan ini dengan mendukung properti di KSPROPSETID_StreamAllocator.
Antarmuka DISPATCH_LEVEL beroperasi sebagai berikut:
Ketika permintaan alokasi dikirimkan ke alokator, alokator mengembalikan pointer ke bingkai jika tersedia. Jika tidak, maka akan segera mengembalikan NULL.
Ketika permintaan pembebasan dikirimkan ke alokator, alokator memberi sinyal peristiwa "bingkai bebas" pada alokator aliran yang memberi tahu klien bahwa bingkai bebas tersedia. Selain itu, jika ada IRP permintaan alokasi yang menunggu untuk diselesaikan, alokator harus menjadwalkan item pekerja (jika IRQL saat ini tidak PASSIVE_LEVEL) dan menyelesaikan permintaan dengan frame yang tersedia.
Dimungkinkan jika antarmuka DISPATCH_LEVEL dan antarmuka berbasis IRP saling bersaing untuk ruang memori bebas. KS menyinkronkan antrean ini menggunakan cancel spin lock.