Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy minifiltr zarejestrował używane typy kontekstu, może utworzyć kontekst, wywołując FltAllocateContext. Ta rutyna wybiera odpowiednią definicję kontekstu do użycia zgodnie z kryteriami opisanymi w Rejestrowanie typów kontekstu.
Przed przydzielaniem kontekstu i podjęciem próby jego ustawienia minifiltr może wywołać następujące procedury, aby określić, czy podstawowy system plików obsługuje konteksty pliku, strumienia lub uchwytu strumienia.
- FltSupportsFileContexts lub FltSupportsFileContextsEx
- FltSupportsStreamContexts
- FltSupportsStreamHandleContexts
W poniższym przykładzie kodu, zaczerpniętym ze sterownika przykładowego minifiltru CTX, procedura CtxInstanceSetup wywołuje FltAllocateContext w celu utworzenia kontekstu wystąpienia:
status = FltAllocateContext(
FltObjects->Filter, //Filter
FLT_INSTANCE_CONTEXT, //ContextType
CTX_INSTANCE_CONTEXT_SIZE, //ContextSize
NonPagedPool, //PoolType
&instanceContext); //ReturnedContext
W przykładzie CTX następująca definicja kontekstu jest rejestrowana dla kontekstów wystąpień:
{ FLT_INSTANCE_CONTEXT, //ContextType
0, //Flags
CtxContextCleanup, //ContextCleanupCallback
CTX_INSTANCE_CONTEXT_SIZE, //Size
CTX_INSTANCE_CONTEXT_TAG }, //PoolTag
Definicja kontekstu ma stały rozmiar, ponieważ człon Rozmiar wynosi CTX_INSTANCE_CONTEXT_SIZE (w przeciwieństwie do FLT_VARIABLE_SIZED_CONTEXTS, który służy do wskazywania definicji kontekstu o zmiennym rozmiarze). Należy pamiętać, że flaga FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH nie jest ustawiona w elemencie flagi. W takim przypadku, jeśli wartość parametru ContextSize w FltAllocateContext odpowiada wartości członka Size w definicji kontekstu, FltAllocateContext przydziela kontekst instancji z odpowiedniej niestronicowanej listy lookaside. Jeśli wartości nie są zgodne, FltAllocateContext kończy się niepowodzeniem z zwracaną wartością STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND.
W przypadku powodzenia FltAllocateContext ustawia licznik odwołań w nowym kontekście na jeden. Gdy kontekst nie jest już potrzebny, sterownik minifiltru musi zwolnić tę referencję. W związku z tym, każde wywołanie FltAllocateContext musi być uzupełnione kolejnym wywołaniem FltReleaseContext.
Po utworzeniu kontekstu minifiltr może ustawić go dla obiektu.