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:
当它从用户模式应用程序收到请求以停止在特定卷上记录 I/O 请求时。
检测到文件或目录已重命名时。
关闭文件流时,文件系统负责确保删除并释放与该流关联的所有每个流上下文。 为此,文件系统必须在文件控制块(FCB)或其他流上下文对象上调用 FsRtlTeardownPerStreamContexts。 FsRtlTeardownPerStreamContexts 演练 FilterContexts 列表,删除每个条目并调用其 FreeCallback 例程。
因此,文件系统筛选器驱动程序不应从IRP_MJ_CLOSE或IRP_MJ_PNP调度例程中调用 FsRtlRemovePerStreamContext。 这种调用不仅不必要,而且还可能会干扰文件系统对 FsRtlTeardownPerStreamContexts的调用。
文件系统筛选器驱动程序不应从每个流上下文结构的 FreeCallback 例程中调用 FsRtlRemovePerStreamContext。 这是因为基础文件系统在已从 FilterContexts 列表中删除上下文结构后调用 FreeCallback 例程。
若要初始化每个流上下文结构,请使用 FsRtlInitPerStreamContext 宏。
若要将初始化的每个流上下文结构与文件流相关联,请调用 FsRtlInsertPerStreamContext。
若要检索与文件流关联的每个流上下文结构,请调用 FsRtlLookupPerStreamContext。
FsRtlRemovePerStreamContext 只能在支持筛选器上下文的文件系统上使用。
有关详细信息,请参阅旧文件系统筛选器驱动程序中的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 SP4 更新汇总;Windows XP |
目标平台 | 普遍 |
标头 | ntifs.h (include Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
另请参阅
FsRtlGetPerStreamContextPointer
FsRtlSupportsPerStreamContexts