Creazione di contesti

Dopo che un minifilter ha registrato i tipi di contesto usati, può creare un contesto chiamando FltAllocateContext. Questa routine seleziona la definizione di contesto appropriata da usare in base ai criteri descritti in Registrazione dei tipi di contesto.

Prima di allocare un contesto e tentare di impostarlo, un minifilter può chiamare le routine seguenti per determinare se il file system sottostante supporta contesti di gestione di file, flusso o flusso:

Nell'esempio di codice seguente, tratto dal driver minifilter di esempio CTX , la routine CtxInstanceSetup chiama FltAllocateContext per creare un contesto di istanza:

status = FltAllocateContext(
      FltObjects->Filter,           //Filter
      FLT_INSTANCE_CONTEXT,         //ContextType
      CTX_INSTANCE_CONTEXT_SIZE,    //ContextSize
      NonPagedPool,                 //PoolType
      &instanceContext);            //ReturnedContext

Nell'esempio CTX viene registrata la definizione di contesto seguente per i contesti di istanza:

{ FLT_INSTANCE_CONTEXT,              //ContextType
  0,                                 //Flags
  CtxContextCleanup,                 //ContextCleanupCallback
  CTX_INSTANCE_CONTEXT_SIZE,         //Size
  CTX_INSTANCE_CONTEXT_TAG },        //PoolTag

La definizione del contesto è di dimensioni fisse perché il membro Size è CTX_INSTANCE_CONTEXT_SIZE (rispetto a FLT_VARIABLE_SIZED_CONTEXTS, che viene usato per indicare una definizione di contesto a dimensione variabile). Si noti che il flag FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH non è impostato nel membro Flags . In questo caso, se il valore del parametro ContextSize di FltAllocateContext corrisponde a quello del membro Size della definizione del contesto, FltAllocateContext alloca il contesto dell'istanza dall'elenco lookaside non di pagina appropriato. Se i valori non corrispondono, FltAllocateContext ha esito negativo con un valore restituito di STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND.

In caso di esito positivo, FltAllocateContext inizializza il conteggio dei riferimenti sul nuovo contesto su uno. Quando il contesto non è più necessario, il driver minifilter deve rilasciare questo riferimento. Pertanto, ogni chiamata a FltAllocateContext deve essere abbinata da una chiamata successiva a FltReleaseContext.

Dopo aver creato un contesto, un minifilter può impostarlo per un oggetto .