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


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

Подпрограмма ntCreateSection создает объект раздела .

Синтаксис

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

Параметры

[out] SectionHandle

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

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

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

NtCreateSection возвращает 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, чтобы закрыть его.

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

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

Заметка

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000
целевая платформа Всеобщий
заголовка ntifs.h (include Wdm.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

См. также

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection