Menggunakan ECP untuk memproses operasi IRP_MJ_CREATE dalam driver filter sistem file
Anda dapat menggunakan parameter buat ekstra (ECP) di driver filter sistem file Anda untuk memproses operasi IRP_MJ_CREATE. Driver filter sistem file Anda dapat memanggil rutinitas di bagian berikut untuk mengambil, mengatur (menambahkan), mengakui, dan menghapus ECP untuk operasi IRP_MJ_CREATE . Anda juga dapat menentukan ruang sistem operasi tempat ECP berasal.
Mengambil EKP
Untuk mengambil ECP untuk operasi IRP_MJ_CREATE:
Panggil FltGetEcpListFromCallbackData (atau FsRtlGetEcpListFromIrp) untuk mengambil pointer ke ECP_LIST yang terkait dengan operasi pembuatan.
Lakukan salah satu operasi berikut:
- Panggil FltGetNextExtraCreateParameter (atau FsRtlGetNextExtraCreateParameter) untuk mengambil pointer ke struktur konteks ECP berikutnya (atau pertama) dalam daftar ECP.
- Panggil FltFindExtraCreateParameter (atau FsRtlFindExtraCreateParameter) untuk mencari daftar ECP untuk struktur konteks ECP dari jenis tertentu. Salah satu rutinitas mengembalikan penunjuk ke struktur konteks ECP jika struktur ditemukan.
Mengatur ECP
Untuk mengatur ECP untuk operasi IRP_MJ_CREATE , driver filter sistem file Anda akan:
Atur ECP di ECP_LIST yang sudah ada.
Atur ECP dalam ECP_LIST yang baru dibuat.
Mengatur ECP di ECP_LIST yang sudah ada
Untuk mengatur ECP di ECP_LIST yang sudah ada yang terkait dengan operasi buat:
Panggil FltGetEcpListFromCallbackData (atau FsRtlGetEcpListFromIrp) untuk mengambil pointer ke ECP_LIST yang terkait dengan operasi pembuatan.
Panggil FltAllocateExtraCreateParameter (atau FsRtlAllocateExtraCreateParameter) untuk mengalokasikan kumpulan memori halaman untuk struktur konteks ECP dan untuk menghasilkan penunjuk ke struktur tersebut.
Panggil FltInsertExtraCreateParameter (atau FsRtlInsertExtraCreateParameter) untuk menyisipkan struktur konteks ECP ke dalam struktur ECP_LIST.
Mengatur ECP di ECP_LIST yang baru dibuat
Jika ECP_LIST saat ini tidak terkait dengan operasi pembuatan, Anda harus membuatnya lalu mengatur ECP di dalamnya:
Panggil FltAllocateExtraCreateParameterList (atau FsRtlAllocateExtraCreateParameterList) untuk mengalokasikan memori untuk struktur ECP_LIST.
Panggil FltAllocateExtraCreateParameter (atau FsRtlAllocateExtraCreateParameter) untuk mengalokasikan kumpulan memori halaman untuk struktur konteks ECP dan untuk menghasilkan penunjuk ke struktur tersebut.
Panggil FltInsertExtraCreateParameter (atau FsRtlInsertExtraCreateParameter) untuk menyisipkan struktur konteks ECP ke dalam ECP_LIST.
Panggil FltSetEcpListIntoCallbackData (atau FsRtlSetEcpListIntoIrp) untuk melampirkan daftar ECP ke operasi buat.
Menghapus ECP
Untuk menghapus ECP untuk operasi IRP_MJ_CREATE:
Panggil FltRemoveExtraCreateParameter (atau FsRtlRemoveExtraCreateParameter) untuk mencari daftar ECP untuk struktur konteks ECP. Jika struktur konteks ECP ditemukan, rutin melepaskan struktur konteks ECP dari daftar ECP.
Untuk membebaskan memori untuk struktur konteks ECP yang terlepas, panggil FltFreeExtraCreateParameter (atau FsRtlFreeExtraCreateParameter). Anda dapat memanggil rutinitas ini untuk membebaskan memori untuk struktur konteks ECP jika Anda mengalokasikan memori dengan salah satu cara berikut:
- Anda memanggil FltAllocateExtraCreateParameter (atau FsRtlAllocateExtraCreateParameter) untuk mengalokasikan kumpulan memori halaman
- Anda memanggil FltAllocateExtraCreateParameterFromLookasideList (atau FsRtlAllocateExtraCreateParameterFromLookasideList) untuk mengalokasikan kumpulan memori dari daftar lookaside
Menandai ECP sebagai diakui, atau menentukan status pengakuan
Panggil rutinitas berikut untuk menandai EKP sebagai diakui atau tentukan apakah ECP ditandai sebagai diakui:
Panggil FltAcknowledgeEcp (atau FsRtlAcknowledgeEcp) untuk menandai struktur konteks ECP sebagaimana diakui. ECP dapat ditandai seperti yang dilihat, digunakan, diproses, atau kondisi ECP lainnya.
Panggil FltIsEcpAcknowledged (atau FsRtlIsEcpAcknowledged) untuk menentukan apakah struktur konteks ECP ditandai sebagai diakui.
Menentukan mode asal
Panggil FltIsEcpFromUserMode (atau FsRtlIsEcpFromUserMode) untuk menentukan apakah struktur konteks ECP berasal dari mode pengguna. Driver filter sistem file dapat menolak untuk menerima struktur konteks ECP yang berasal dari mode pengguna.
Menggunakan daftar lookaside untuk mengalokasikan ECP
Panggil rutinitas berikut untuk mengalokasikan ECP dari daftar lookaside dan untuk mengelola daftar lookaside dan ECP:
Panggil FltInitExtraCreateParameterLookasideList (atau FsRtlInitExtraCreateParameterLookasideList) untuk menginisialisasi daftar lookaside kumpulan halaman atau nonpaged yang digunakan untuk alokasi satu atau beberapa struktur konteks ECP dengan ukuran tetap.
Panggil FltDeleteExtraCreateParameterLookasideList (atau FsRtlDeleteExtraCreateParameterLookasideList) untuk membebaskan daftar lookaside.
Panggil FltAllocateExtraCreateParameterFromLookasideList (atau FsRtlAllocateExtraCreateParameterFromLookasideList) untuk mengalokasikan kumpulan memori dari daftar lookaside untuk struktur konteks ECP dan untuk menghasilkan pointer ke struktur tersebut.
Panggil FltFreeExtraCreateParameter (atau FsRtlFreeExtraCreateParameter) untuk membebaskan memori untuk struktur konteks ECP.