Freigeben über


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: