SECTION_OBJECT_POINTERS 结构 (wdm.h)

内存管理器和缓存管理器使用文件系统或重定向程序驱动程序分配 的SECTION_OBJECT_POINTERS 结构来存储文件流的文件映射和缓存相关信息。

语法

typedef struct _SECTION_OBJECT_POINTERS {
  PVOID DataSectionObject;
  PVOID SharedCacheMap;
  PVOID ImageSectionObject;
} SECTION_OBJECT_POINTERS;

成员

DataSectionObject

指向数据节对象的不透明指针 (,即 CONTROL_AREA结构) ,用于跟踪数据文件流的状态信息。 当操作系统首次缓存数据流时,内存管理器会设置此成员。 NULL 值指示数据流当前不在内存中;但是,此值可以随时更改。

SharedCacheMap

指向缓存映射对象的不透明指针 (,即 SHARED_CACHE_MAP 结构) ,用于跟踪映射到数据文件流的视图。 当操作系统首次缓存流时,缓存管理器将设置此成员。 NULL 值表示数据流当前未缓存;但是,此值可以随时更改。

ImageSectionObject

指向图像部分对象的不透明指针 (,即 CONTROL_AREA结构) ,用于跟踪可执行文件流的状态信息。 每当为流创建可执行映像节时,内存管理器将设置此成员。 NULL 值指示可执行映像当前不在内存中;但是,此值可以随时更改。

注解

SECTION_OBJECT_POINTERS 结构将文件对象链接到文件流的 section 对象。 也就是说, SECTION_OBJECT_POINTERS 结构通过其成员将特定文件对象连接到虚拟内存控制结构,这些结构在内存中时跟踪流的内容,并允许操作系统在内容不在内存中时提取这些内容。

SECTION_OBJECT_POINTERS结构和文件流之间存在一对一关系。 多个文件对象可以与特定文件流相关联,每个对象表示流的打开实例。 但是,只有一 个SECTION_OBJECT_POINTERS 结构可以与给定流相关联。 如果流有多个文件对象,则所有文件对象的 SectionObjectPointer 成员必须指向与流) 关联的同一 SECTION_OBJECT_POINTERS 结构 (。

对于第一个文件流打开请求,文件系统或重定向程序驱动程序必须:

  1. 从非分页池中分配 SECTION_OBJECT_POINTERS 结构。

  2. 将已分配 SECTION_OBJECT_POINTERS 结构的所有成员初始化为 NULL

  3. 将关联文件对象的 SectionObjectPointer 成员设置为指向初始化 SECTION_OBJECT_POINTERS 结构。

对于对同一文件流的后续打开请求,文件系统或重定向程序驱动程序必须将关联文件对象的 SectionObjectPointer 成员设置为指向以前为文件流分配 SECTION_OBJECT_POINTERS 结构。

警告

文件系统筛选器驱动程序必须将 SECTION_OBJECT_POINTERS 结构的成员视为不透明,因为基础文件系统负责同步成员,因此可以随时更改其值。

文件由一个或多个流组成,具体取决于文件系统。 有关详细信息,请参阅文件流、Stream上下文和 Per-Stream 上下文

要求

要求
Header wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h)

另请参阅

CcInitializeCacheMap

DEVICE_OBJECT

FILE_OBJECT

FOBX

FSRTL_ADVANCED_FCB_HEADER

IoGetDeviceObjectPointer

MmFlushImageSection

ObDereferenceObject