Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
После регистрации типов контекста, которые он использует, минифильтр может создать контекст, вызвав FltAllocateContext. Эта подпрограмма выбирает соответствующее определение контекста для использования в соответствии с критериями, описанными в разделе "Регистрирование типов контекста".
Перед выделением контекста и попыткой задать его мини-фильтр может вызвать следующие подпрограммы, чтобы определить, поддерживает ли базовая файловая система контексты файлов, потоков или потоковых дескрипторов:
- FltSupportsFileContexts или FltSupportsFileContextsEx
- FltSupportsStreamContexts
- FltSupportsStreamHandleContexts
В следующем примере кода, взятом из примера драйвера минифильтра CTX , подпрограмма CtxInstanceSetup вызывает FltAllocateContext для создания контекста экземпляра:
status = FltAllocateContext(
FltObjects->Filter, //Filter
FLT_INSTANCE_CONTEXT, //ContextType
CTX_INSTANCE_CONTEXT_SIZE, //ContextSize
NonPagedPool, //PoolType
&instanceContext); //ReturnedContext
Следующее определение контекста регистрируется для контекстов экземпляра в примере CTX:
{ FLT_INSTANCE_CONTEXT, //ContextType
0, //Flags
CtxContextCleanup, //ContextCleanupCallback
CTX_INSTANCE_CONTEXT_SIZE, //Size
CTX_INSTANCE_CONTEXT_TAG }, //PoolTag
Определение контекста имеет фиксированный размер, так как элемент Size является CTX_INSTANCE_CONTEXT_SIZE (в сравнении с FLT_VARIABLE_SIZED_CONTEXTS, который используется для указания контекста переменного размера). Обратите внимание, что флаг FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH не задан в элементе Flags . В этом случае, если значение параметра ContextSize функции FltAllocateContext соответствует значению элемента Size определения контекста, FltAllocateContext выделяет контекст экземпляра из соответствующего непагированного списка "lookaside". Если значения не совпадают, FltAllocateContext завершается ошибкой с возвращаемым значением STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND.
При успешном выполнении FltAllocateContext инициализирует количество ссылок для нового контекста, равное единице. Если контекст больше не нужен, драйвер минифильтра должен освободить эту ссылку. Таким образом, каждый вызов FltAllocateContext должен соответствовать последующему вызову FltReleaseContext.
После создания контекста мини-фильтр может задать его для объекта.