建立內容
一旦迷你篩選註冊它所使用的內容類型,就可以呼叫 FltAllocateCoNtext來建立內容。 此常式會根據 註冊內容類型中所述的準則,選取要使用的適當內容定義。
配置內容並嘗試設定內容之前,迷你篩選可以呼叫下列常式來判斷基礎檔案系統是否支援檔案、資料流程或資料流程控制碼內容:
- FltSupportsFileCoNtexts或FltSupportsFileCoNtextsEx
- FltSupportsStreamCoNtexts
- FltSupportsStreamHandleCoNtexts
在下列程式碼範例中,從 CTX 範例迷你篩選驅動程式 取得, CtxInstanceSetup 常式會呼叫 FltAllocateCoNtext 來建立實例內容:
status = FltAllocateContext(
FltObjects->Filter, //Filter
FLT_INSTANCE_CONTEXT, //ContextType
CTX_INSTANCE_CONTEXT_SIZE, //ContextSize
NonPagedPool, //PoolType
&instanceContext); //ReturnedContext
在 CTX 範例中,下列內容定義會針對實例內容註冊:
{ FLT_INSTANCE_CONTEXT, //ContextType
0, //Flags
CtxContextCleanup, //ContextCleanupCallback
CTX_INSTANCE_CONTEXT_SIZE, //Size
CTX_INSTANCE_CONTEXT_TAG }, //PoolTag
內容定義是固定大小的,因為 Size 成員是CTX_INSTANCE_CONTEXT_SIZE (與FLT_VARIABLE_SIZED_CONTEXTS,用來指出變數大小的內容定義) 。 請注意,旗標成員中未設定FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH 旗標 。 在此情況下,如果FltAllocateCoNtext的CoNtextSize參數值符合內容定義之 Size成員的值,FltAllocateCoNtext就會從適當的非分頁 lookaside 清單中配置實例內容。 如果值不相符, FltAllocateCoNtext 會失敗,傳回值為 STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND。
成功時, FltAllocateCoNtext 會將新內容上的參考計數初始化為一個。 不再需要內容時,迷你篩選驅動程式必須釋放此參考。 因此, 每次呼叫 FltAllocateCoNtext 都必須與 後續對 FltReleaseCoNtext的呼叫進行比對。
建立內容之後,迷你篩選就可以 為物件設定它。