Freigeben von Kontexten

Ein Minifilter gibt einen Kontext frei, indem FltReleaseContext aufgerufen wird. Jeder erfolgreiche Aufruf einer der folgenden Routinen muss schließlich durch einen Aufruf von FltReleaseContext abgeglichen werden:

Beachten Sie, dass der von FltSetXxxContext zurückgegebene OldContext-Zeiger und der von FltDeleteContext zurückgegebene Kontextzeiger ebenfalls freigegeben werden müssen, wenn sie nicht mehr benötigt werden.

Im folgenden Codebeispiel aus dem CTX-Beispielminifilter erstellt und legt die CtxInstanceSetup-Routine einen instance Kontext fest und ruft dann FltReleaseContext auf:

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;

Beachten Sie, dass FltReleaseContext aufgerufen wird, unabhängig davon, ob der Aufruf von FltSetInstanceContext erfolgreich ist: