Функция FsRtlRemovePerStreamContext (ntifs.h)

FsRtlRemovePerStreamContext удаляет структуру контекста для каждого потока из списка контекстов каждого потока, связанных с потоком файлов.

Синтаксис

PFSRTL_PER_STREAM_CONTEXT FsRtlRemovePerStreamContext(
  [in]           PFSRTL_ADVANCED_FCB_HEADER StreamContext,
  [in, optional] PVOID                      OwnerId,
  [in, optional] PVOID                      InstanceId
);

Параметры

[in] StreamContext

Указатель на структуру FSRTL_ADVANCED_FCB_HEADER для файлового потока. Чтобы получить этот указатель из объекта файла, используйте макрос FsRtlGetPerStreamContextPointer .

[in, optional] OwnerId

Используется для идентификации контекстных сведений как принадлежащих конкретному драйверу фильтра.

[in, optional] InstanceId

Используется для поиска определенного экземпляра контекста потока. Если параметр не указан, любой из контекстов, принадлежащих драйверу фильтра, удаляется и возвращается.

Если не указан ни идентификатор владельца , ни идентификатор экземпляра , все связанные контексты потока будут удалены и возвращены.

Возвращаемое значение

FsRtlRemovePerStreamContext возвращает указатель на удаленный контекст потока. Если совпадение не найдено или файловая система не поддерживает контексты фильтров, функция FsRtlRemovePerStreamContext возвращает значение NULL.

Комментарии

Драйвер фильтра файловой системы вызывает FsRtlRemovePerStreamContext , чтобы удалить собственную структуру контекста для каждого потока из списка контекстов каждого потока, связанных с файловым потоком.

FsRtlRemovePerStreamContext удаляет только первую найденную структуру контекста для каждого потока. При наличии дополнительных контекстов сопоставления для каждого потока драйвер фильтра должен вызывать FsRtlRemovePerStreamContext столько раз, сколько требуется для удаления всех контекстов.

Эту подпрограмму следует использовать только в том случае, если драйверу фильтра необходимо удалить сведения о контексте, связанные с потоком файлов, пока поток все еще открыт. Например, драйвер фильтра может вызывать FsRtlRemovePerStreamContext в следующих случаях:

  • Когда он получает запрос от приложения в пользовательском режиме, чтобы остановить ведение журнала запросов ввода-вывода на определенном томе.

  • При обнаружении переименования файла или каталога.

При закрытии файлового потока файловая система отвечает за удаление и освобождение всех контекстов каждого потока, связанных с этим потоком. Для этого файловая система должна вызвать FsRtlTeardownPerStreamContexts в блоке управления файлом (FCB) или другом объекте контекста потока для файлового потока. FsRtlTeardownPerStreamContexts описывает список FilterContexts, удаляя каждую запись и вызывая ее подпрограмму FreeCallback .

Таким образом, драйвер фильтра файловой системы не должен вызывать FsRtlRemovePerStreamContext из подпрограммы IRP_MJ_CLOSE или IRP_MJ_PNP диспетчеризации. Такой вызов не только не требуется, но и может помешать вызову FsRtlTeardownPerStreamContexts файловой системы.

Драйвер фильтра файловой системы не должен вызывать FsRtlRemovePerStreamContext из подпрограммы FreeCallback контекстной структуры потока. Это связано с тем, что базовая файловая система вызывает подпрограмму FreeCallback после того, как она уже удалила структуру контекста из списка FilterContexts.

Чтобы инициализировать структуру контекста для каждого потока, используйте макрос FsRtlInitPerStreamContext .

Чтобы связать инициализированную структуру контекста для каждого потока с файловым потоком, вызовите FsRtlInsertPerStreamContext.

Чтобы получить структуру контекста для каждого потока, связанную с потоком файлов, вызовите FsRtlLookupPerStreamContext.

FsRtlRemovePerStreamContext можно использовать только в файловых системах, поддерживающих контексты фильтров.

Дополнительные сведения см. в разделе Отслеживание Per-Stream контекста в устаревшем драйвере фильтра файловой системы.

Требования

Требование Значение
Минимальная версия клиента Накопительный пакет обновления Windows 2000 с пакетом обновления 4 (SP4); Windows XP
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также раздел

FSRTL_ADVANCED_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlGetPerStreamContextPointer

FsRtlInitPerStreamContext

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSupportsPerStreamContexts

FsRtlTeardownPerStreamContexts

IRP_MJ_CLOSE

IRP_MJ_PNP