Поделиться через


Функция FsRtlCreateSectionForDataScan (ntifs.h)

Подпрограмма FsRtlCreateSectionForDataScan создает объект раздела FsRtlCreateSectionForDataScan. Используйте эту процедуру с крайней осторожностью. (См. следующий раздел Примечания.)

Синтаксис

NTSTATUS FsRtlCreateSectionForDataScan(
  [out]           PHANDLE            SectionHandle,
  [out]           PVOID              *SectionObject,
  [out, optional] PLARGE_INTEGER     SectionFileSize,
  [in]            PFILE_OBJECT       FileObject,
  [in]            ACCESS_MASK        DesiredAccess,
  [in, optional]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional]  PLARGE_INTEGER     MaximumSize,
  [in]            ULONG              SectionPageProtection,
  [in]            ULONG              AllocationAttributes,
  [in]            ULONG              Flags
);

Параметры

[out] SectionHandle

Указатель на переменную, выделенную вызывающим объектом, которая получает непрозрачный дескриптор объекта раздела.

[out] SectionObject

Указатель на выделенную вызывающим переменную, которая получает непрозрачный указатель на объект раздела.

[out, optional] SectionFileSize

Указатель на выделенную вызывающим переменную, которая получает размер файла в байтах во время создания объекта раздела. Этот параметр является необязательным и может быть null.

[in] FileObject

Объект файла для открытого файла. Объект раздела будет защищен указанным файлом. Этот параметр является обязательным и не может быть null.

[in] DesiredAccess

Указывает требуемый доступ для объекта раздела как один или несколько из следующих флагов ACCESS_MASK.

флаг DesiredAccess Разрешает вызывающим абонентам
SECTION_MAP_READ Чтение представлений раздела.
SECTION_MAP_WRITE Написание представлений раздела.
SECTION_QUERY Запрос объекта раздела для получения сведений о разделе. Драйверы должны задать этот флаг.
SECTION_ALL_ACCESS Все действия, определенные предыдущими флагами, а также определенные STANDARD_RIGHTS_REQUIRED. (Дополнительные сведения о STANDARD_RIGHTS_REQUIRED см. в разделе ACCESS_MASK.)

[in, optional] ObjectAttributes

Указатель на структуру OBJECT_ATTRIBUTES, указывающую имя объекта и другие атрибуты. Используйте макрос InitializeObjectAttributes для инициализации этой структуры. Так как FsRtlCreateSectionForDataScan вставляет этот объект в таблицу дескрипторов процесса, вызывающий объект должен указать атрибут OBJ_KERNEL_HANDLE при вызове InitializeObjectAttributes.

[in, optional] MaximumSize

Этот параметр зарезервирован для дальнейшего использования.

[in] SectionPageProtection

Указывает защиту для размещения на каждой странице в разделе. Укажите одно из следующих значений. Этот параметр является обязательным и не может быть нулевым.

Флаг Значение
PAGE_READONLY Включает доступ только для чтения к зафиксированной области страниц. Попытка записи в зафиксированный регион приводит к нарушению доступа. Если система отличается от доступа только для чтения и выполнения, попытка выполнить код в зафиксированном регионе приводит к нарушению доступа.
PAGE_READWRITE Включает доступ для чтения и записи к зафиксированной области страниц.

[in] AllocationAttributes

Битовые маски флагов SEC_XXX определяют атрибуты выделения раздела. Укажите одно или несколько следующих значений. Этот параметр является обязательным и не может быть нулевым.

Флаг Значение
SEC_COMMIT Выделяет физическое хранилище в памяти или на диске на диске для всех страниц раздела. Это параметр по умолчанию. Обратите внимание, что этот флаг является обязательным и не может быть опущен.
SEC_FILE Файл, указанный параметром FileObject, является сопоставленным файлом.

[in] Flags

Этот параметр зарезервирован для дальнейшего использования.

Возвращаемое значение

FsRtlCreateSectionForDataScan возвращает STATUS_SUCCESS или соответствующее значение NTSTATUS, например одно из следующих:

Возвращаемый код Описание
STATUS_END_OF_FILE
Размер файла, указанного параметром FileObject, равен нулю. Это код ошибки.
STATUS_FILE_LOCK_CONFLICT
Файл, указанный параметром FileObject, заблокирован. Это код ошибки.
STATUS_INSUFFICIENT_RESOURCES
FsRtlCreateSectionForDataScan обнаружил сбой выделения пула. Это код ошибки.
STATUS_INVALID_FILE_FOR_SECTION
Файл, указанный параметром FileObject, не поддерживает разделы. Это код ошибки.
STATUS_INVALID_PARAMETER_8
Недопустимое значение параметра SectionPageProtection. Это код ошибки.
STATUS_INVALID_PARAMETER_9
Вызывающий объект указал недопустимое значение для параметра AllocationAttributes. Это код ошибки.
STATUS_PRIVILEGE_NOT_HELD

Вызывающий объект не имеет необходимых привилегий для создания объекта раздела с доступом, указанным в параметре DesiredAccess. Это код ошибки.

Замечания

Важноподпрограмма FsRtlCreateSectionForDataScan следует использовать только в случаях, когда дескриптор объекта файла, указанный в параметре FileObject еще не создан (обычно при обработке операции после создания). Если драйвер имеет дескриптор к объекту файла или может получить дескриптор для объекта файла, драйвер должен использовать вместо этого подпрограмму ZwCreateSection.
 
После того как объект раздела, созданный этой подпрограммой, больше не требуется, закройте дескриптор объекта раздела (SectionHandle) путем вызова процедуры ZwClose и разоменовки самого объекта раздела (SectionObject), вызвав подпрограмму ObDereferenceObject.

Дополнительные сведения о создании сопоставленных разделов и представлений памяти см. в разделе Объекты и представления разделов. Также см. документацию по подпрограмме CreateFileMapping в пакете SDK для Microsoft Windows.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Накопительный пакет обновления для Windows 2000 с пакетом обновления 4 (SP4); Накопительный пакет обновления диспетчера фильтров для Windows XP с пакетом обновления 2 (SP2).
минимальный поддерживаемый сервер Microsoft Windows Server 2003 с пакетом обновления 1 (SP1)
целевая платформа Всеобщий
заголовка ntifs.h (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также

ACCESS_MASK

CcPurgeCacheSection

MmFlushImageSection

MmForceSectionClosed

ZwCreateSection