Merilis Konteks
Minifilter merilis konteks dengan memanggil FltReleaseContext. Setiap panggilan yang berhasil ke salah satu rutinitas berikut akhirnya harus dicocokkan dengan panggilan ke FltReleaseContext:
Rutinitas pembuatan konteks:
Konteks mendapatkan rutinitas:
Rutinitas kumpulan konteks:
Rutinitas kenaikan referensi konteks:
Perhatikan bahwa penunjuk OldContext yang dikembalikan oleh FltSetXxxContext dan penunjuk Konteks yang dikembalikan oleh FltDeleteContext juga harus dirilis ketika tidak lagi diperlukan.
Dalam contoh kode berikut, diambil dari minifilter sampel CTX, rutinitas CtxInstanceSetup membuat dan mengatur konteks instans lalu memanggil FltReleaseContext:
status = FltAllocateContext(
FltObjects->Filter, //Filter
FLT_INSTANCE_CONTEXT, //ContextType
CTX_INSTANCE_CONTEXT_SIZE, //ContextSize
NonPagedPool, //PoolType
&instanceContext); //ReturnedContext
...
status = FltSetInstanceContext(
FltObjects->Instance, //Instance
FLT_SET_CONTEXT_KEEP_IF_EXISTS, //Operation
instanceContext, //NewContext
NULL); //OldContext
if (instanceContext != NULL) {
FltReleaseContext(instanceContext);
}
return status;
Perhatikan bahwa FltReleaseContext dipanggil terlepas dari apakah panggilan ke FltSetInstanceContext berhasil:
Jika FltSetInstanceContext berhasil, FltSetInstanceContext menambahkan referensinya sendiri ke konteks instans (yaitu, menambah jumlah referensi pada konteks instans). Dengan demikian, referensi yang ditetapkan oleh FltAllocateContext tidak lagi diperlukan, dan panggilan ke FltReleaseContext menghapusnya.
Jika FltSetInstanceContext gagal, konteks instans hanya memiliki satu referensi, yaitu yang ditetapkan oleh FltAllocateContext. Ketika FltReleaseContext kembali, konteks instans memiliki jumlah referensi nol, dan dibebaskan oleh manajer filter.