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


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

NtCreateSectionEx создает объект раздела ** и открывает дескриптор объекта с указанным требуемым доступом. Это расширенная версия NtCreateSection, которая создает объект раздела, указывая, что это фактически раздел "Расширения окна адресов" (AWE).

Синтаксис

__kernel_entry NTSYSCALLAPI NTSTATUS NtCreateSectionEx(
  [out]          PHANDLE                 SectionHandle,
  [out]          ACCESS_MASK             DesiredAccess,
  [in, optional] POBJECT_ATTRIBUTES      ObjectAttributes,
  [in, optional] PLARGE_INTEGER          MaximumSize,
  [in]           ULONG                   SectionPageProtection,
  [in]           ULONG                   AllocationAttributes,
  [in, optional] HANDLE                  FileHandle,
  [in/out]       PMEM_EXTENDED_PARAMETER ExtendedParameters,
                 ULONG                   ExtendedParameterCount
);

Параметры

[out] SectionHandle

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

[out] DesiredAccess

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

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

[in, optional] ObjectAttributes

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

[in, optional] MaximumSize

Задает максимальный размер раздела в байтах. NtCreateSection округляет это значение до ближайшего нескольких PAGE_SIZE. Если раздел поддерживается файлом разбиения на страницы, MaximumSize указывает фактический размер раздела. Если раздел поддерживается обычным файлом, MaximumSize указывает максимальный размер, с которым можно расширить или сопоставить файл.

[in] SectionPageProtection

Указывает защиту для размещения на каждой странице в разделе. Используйте одно из следующих четырех значений: PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE или PAGE_WRITECOPY. Описание этих значений см. в разделе CreateFileMapping.

[in] AllocationAttributes

Указывает битовую маску флагов SEC_XXX, определяющих атрибуты выделения раздела. Описание этих флагов см. в разделе CreateFileMapping.

[in, optional] FileHandle

При необходимости задает дескриптор для открытого объекта файла. Если значение FileHandle равно NULL, раздел поддерживается файлом разбиения по страницам. В противном случае раздел поддерживается указанным файлом.

[in/out] ExtendedParameters

Указатель на массив структур MEM_EXTENDED_PARAMETER содержит расширенные параметры для создания раздела.

ExtendedParameterCount

Размер массива, на который ExtendedParameters указывает.

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

NtCreateSectionEx возвращает STATUS_SUCCESS при успешном выполнении или соответствующий код ошибки NTSTATUS при сбое. Возможные коды состояния ошибок включают следующие:

Возвращаемый код Описание
STATUS_FILE_LOCK_CONFLICT Файл, указанный параметром FileHandle, заблокирован.
STATUS_INVALID_FILE_FOR_SECTION Файл, указанный FileHandle, не поддерживает разделы.
STATUS_INVALID_PAGE_PROTECTION Значение, указанное для параметра SectionPageProtection, недопустимо.
STATUS_MAPPED_FILE_SIZE_ZERO Размер файла, указанного FileHandle, равен нулю, и MaximumSize равно нулю.
STATUS_SECTION_TOO_BIG Значение MaximumSize слишком велико. Это происходит, если MaximumSize больше, чем системное максимальное значение для разделов, или если MaximumSize больше указанного файла, а раздел не является записываемым.

Замечания

После того как дескриптор, на который указывает SectionHandle больше не используется, драйвер должен вызвать NtClose, чтобы закрыть его.

Если вызывающий объект не работает в контексте системного потока, он должен убедиться, что все создаваемые дескрипторы являются частными дескрипторами. В противном случае дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер. Дополнительные сведения см. в разделе Обработчики объектов.

Дополнительные сведения о настройке сопоставленных разделов и представлений памяти см. в разделах и представлениях.

Заметка

Если вызов этой функции происходит в пользовательском режиме, следует использовать имя "NtCreateSectionEx" вместо "ZwCreateSectionEx".

Для вызовов драйверов в режиме ядра NtXxx и ZwXxx версии подпрограммы Windows Native System Services могут вести себя по-разному в том, как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между NtXxx и ZwXxx версиями подпрограммы см. в разделе Using Nt and Zw Versions of the Native System Services Routines.

ExtendedParameters является расширенным параметром на основе стека, если был указан предпочтительный узел NUMA.

Можно указать только один экземпляр расширенного параметра.

Преобразуйте в 1-й номер узла numa, который ожидается ниже этого API.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10 версии 1803
заголовка ntifs.h
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe

См. также

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection