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


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

NtCreateSectionEx создает объект section** и открывает дескриптор объекта с указанным требуемым доступом. Это расширенная версия NtCreateSection , которая создает объект section, указывая, что это фактически раздел расширения окна адресов (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, которая получает дескриптор объекта section.

[out] DesiredAccess

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

Флаг DesiredAccess Позволяет вызывающей абонентской службе сделать это
SECTION_EXTEND_SIZE Динамическое расширение размера раздела.
SECTION_MAP_EXECUTE Выполнение представлений раздела.
SECTION_MAP_READ Чтение представлений раздела.
SECTION_MAP_WRITE Написание представлений раздела.
SECTION_QUERY Запросите объект section для получения сведений о разделе. Драйверы должны установить этот флаг.
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 могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями процедуры NtXxx и ZwXxx см. в разделе Использование версий Nt и Zw для процедур собственных системных служб.

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

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

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

Требования

Требование Значение
Минимальная версия клиента Windows 10 версии 1803
Верхняя часть ntifs.h
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe

См. также раздел

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection