Функция 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
Используется для поиска определенного экземпляра контекста каждого потока. В противном случае любой из контекстов, принадлежащих драйверу фильтра, удаляется и возвращается.
Если ни OwnerId, ни InstanceId не указан, все связанные контексты для потока будут удалены и возвращены.
Возвращаемое значение
FsRtlRemovePerStreamContext возвращает указатель на удаленный контекст потока. Если совпадение не найдено или если файловая система не поддерживает контексты фильтров, FsRtlRemovePerStreamContext возвращает значение NULL.
Замечания
Драйвер фильтра файловой системы вызывает FsRtlRemovePerStreamContext, чтобы удалить собственную структуру контекста потока из списка контекстов каждого потока, связанных с файловым потоком.
FsRtlRemovePerStreamContext удаляет только первую сопоставленную структуру контекста потока, найденную. При наличии дополнительных сопоставлений контекстов для потока драйвер фильтра должен вызывать FsRtlRemovePerStreamContext столько раз, сколько требуется для их удаления.
Эта подпрограмма должна использоваться только в том случае, если драйвер фильтра должен отменить контекстную информацию, связанную с потоком файлов, пока поток по-прежнему открыт. Например, драйвер фильтра может вызывать FsRtlRemovePerStreamContext в следующих случаях:
Когда он получает запрос от приложения пользовательского режима, чтобы остановить ведение журнала запросов ввода-вывода в определенном томе.
При обнаружении переименования файла или каталога.
При закрытии потока файловая система отвечает за то, что все контексты каждого потока, связанные с этим потоком, удаляются и освобождаются. Для этого файловая система должна вызывать FsRtlTeardownPerStreamContexts в блоке управления файлами (FCB) или другом объекте контекста потока для файлового потока. FsRtlTeardownPerStreamContexts описывает список FilterContexts, удаляя каждую запись и вызывая ее подпрограмму FreeCallback.
Таким образом, драйвер фильтра файловой системы не должен вызывать FsRtlRemovePerStreamContext из IRP_MJ_CLOSE или IRP_MJ_PNP подпрограммы отправки. Не только такой вызов будет ненужным, но он также может препятствовать вызову файловой системы FsRtlTeardownPerStreamContexts.
Драйвер фильтра файловой системы не должен вызывать
Чтобы инициализировать структуру контекста потока, используйте макрос FsRtlInitPerStreamContext.
Чтобы связать инициализированную структуру контекста потока с потоком файлов, вызовите FsRtlInsertPerStreamContext.
Чтобы получить структуру контекста потока, связанную с потоком, вызовите FsRtlLookupPerStreamContext.
FsRtlRemovePerStreamContext можно использовать только в файловых системах, поддерживающих контексты фильтров.
Дополнительные сведения см. в контексте отслеживания Per-Stream вустаревшего драйвера фильтра файловой системы.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Накопительный пакет обновления Windows 2000 с пакетом обновления 4 (SP4); Windows XP |
целевая платформа | Всеобщий |
заголовка | ntifs.h (include Ntifs.h) |
библиотеки |
NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
См. также
FsRtlGetPerStreamContextPointer
FsRtlSupportsPerStreamContexts