Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Каждый контекст, заданный успешным вызовом FltSetXxxContext , должен быть удален в конечном итоге.
Диспетчер фильтров автоматически удаляет контексты при возникновении следующих ситуаций:
- Объекты, к которым присоединены контексты, удаляются
- Экземпляр мини-фильтра отсоединяется от тома
- Драйвер мини-фильтра выгружен
Таким образом, для явного удаления контекста редко требуется минифильтр.
Минифильтр может удалить контекст, вызвав одну из следующих процедур удаления контекста:
- FltDeleteContext
- FltDeleteFileContext
- FltDeleteInstanceContext
- FltDeleteStreamContext
- FltDeleteStreamHandleContext
- FltDeleteTransactionContext
- FltDeleteVolumeContext
Контекст можно удалить только в том случае, если он в настоящее время задан для объекта. Контекст нельзя удалить, если он еще не задан или он уже заменен успешным вызовом FltSetXxxContext.
Подпрограммы FltDeleteXxxContext возвращают указатель на старый контекст в параметре OldContext, если OldContext не является NULL и не указывает на NULL_CONTEXT. Если OldContext имеет значение NULL, диспетчер фильтров уменьшает количество ссылок в контексте, который затем освобождается, если минифильтр не имеет на него выдающуюся ссылку.
В следующем примере кода показано, как удалить контекст потока:
status = FltDeleteStreamContext(
FltObjects->Instance, //Instance
FltObjects->FileObject, //FileObject
&oldContext); //OldContext
//
// Perform any needed processing
// ...
//
if (oldContext != NULL) {
FltReleaseContext(oldContext);
}
В этом примере FltDeleteStreamContext:
- Удаляет контекст потока из потока.
- Не уменьшает количество ссылок контекста, так как параметр OldContext не равен NULL.
- Возвращает адрес удаленного контекста (контекст, удаленный из потока) в параметре OldContext .
Из-за параметра OldContext , отличного от NULL, после выполнения любой необходимой обработки фильтр должен освободить удаленный контекст, вызвав FltReleaseContext.