Функция NtCreateSection (ntifs.h)
Подпрограмма NtCreateSection создает объект section**.
Синтаксис
__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, которая получает дескриптор объекта section.
[in] 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, раздел поддерживается файлом подкачки. В противном случае для раздела используется указанный файл.
Возвращаемое значение
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 могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями процедуры NtXxx и ZwXxx см. в разделе Использование версий Nt и Zw для процедур собственных системных служб.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000. |
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Wdm.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |