共用方式為


設定內容

建立新的內容之後,迷你篩選驅動程式可以呼叫下列其中一個集合例程,將其附加至物件:

Set 例程會根據 Operation 參數的值執行下列動作:

  • 如果作業 == FLT_SET_CONTEXT_KEEP_IF_EXISTS:

    • 如果迷你篩選程式尚未為 物件設定相同類型的內容,則 set 例程:
      • 將新配置的內容附加至物件。
      • 遞增參考計數。
    • 如果迷你篩選程序已經設定內容,則為 set 例程:
      • 傳回STATUS_FLT_CONTEXT_ALREADY_DEFINED (NTSTATUS 錯誤碼)。
      • 不會取代現有的內容。
      • 不會遞增參考計數。
      • 如果 OldContext 參數不是 NULL,則會將指標儲存在 OldContext 參數中。 不再需要此指標時,迷你篩選驅動程式必須藉由呼叫 FltReleaseContext 來釋放它。
  • 如果作業 == FLT_SET_CONTEXT_REPLACE_IF_EXISTS:

    • set 例程一律會將新內容附加至 物件。
    • 如果迷你篩選驅動程式已經設定內容,則設定例程:
      • 刪除現有的內容、設定新內容,並遞增新內容的參考計數。
      • 如果 OldContext 參數不是 NULL,它會接收已刪除內容的指標。 不再需要此指標時,迷你篩選驅動程式必須藉由呼叫 FltReleaseContext 來釋放它。

設定內容類型之後,迷你篩選程式可以在 後續的 I/O 作業期間取得內容 ,以判斷是否需要採取任何動作。

最終必須 刪除每個成功的內容集。

在下列程式代碼範例中,CtxInstanceSetup 例程會建立及設定實例內容,從 CTX 範例迷你篩選中取得:

status = FltAllocateContext(
           FltObjects->Filter,              //in: Filter
           FLT_INSTANCE_CONTEXT,            //in: ContextType
           CTX_INSTANCE_CONTEXT_SIZE,       //in: ContextSize
           NonPagedPool,                    //in: PoolType
           &instanceContext);               //out: ReturnedContext
...
status = FltSetInstanceContext(
           FltObjects->Instance,            //in: Instance
           FLT_SET_CONTEXT_KEEP_IF_EXISTS,  //in: Operation
           instanceContext,                 //in: NewContext
           NULL);                           //out: OldContext

if (instanceContext != NULL) {
  FltReleaseContext(instanceContext);
}
return status;

請注意,呼叫 FltSetInstanceContext 之後,會呼叫 FltReleaseContext 來釋放 FltAllocateContext設定的參考計數(而非 FltSetInstanceContext)。 這會在發行內容說明。