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_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 结构的成员视为不透明,因为基础文件系统负责成员的同步,因此可以随时更改其值。

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

要求

要求 价值
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h)

另请参阅

CcInitializeCacheMap

DEVICE_OBJECT

FILE_OBJECT

FOBX

FSRTL_ADVANCED_FCB_HEADER

IoGetDeviceObjectPointer

mmFlushImagesection

ObDereferenceObject