структура 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 как непрозрачные, так как базовая файловая система отвечает за синхронизацию элементов и, следовательно, может изменять их значения в любое время.

Файл состоит из одного или нескольких потоков в зависимости от файловой системы. Дополнительные сведения см. в разделе Файловые потоки, контексты Stream и контексты 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