一旦小型篩選程式註冊其使用的內容類型,就可以呼叫 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,FLT_VARIABLE_SIZED_CONTEXTS用於表示可變大小的內容定義)。 請注意,FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH旗標並未在 旗標成員 中設定。 在此情況下,如果 ContextSize 參數的值 FltAllocateContext 符合內容定義 Size 成員的值,FltAllocateContext 從適當的非分頁外觀清單中配置實例內容。 如果值不相符,FltAllocateContext 會失敗,傳回值為 STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND。
成功時,FltAllocateContext 將新內容上的參考計數初始化為一個。 當不再需要上下文時,迷你篩選驅動程式必須釋放此參考。 因此,FltAllocateContext 的每個呼叫都必須與後續呼叫 FltReleaseContext相符。
建立上下文之後,Minifilter 可以針對物件 設定。