Функция 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 |