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 初始化此结构。 如果调用方未在系统线程上下文中运行,则必须在调用 InitializeObjectAttributes时设置OBJ_KERNEL_HANDLE属性。

[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”。

对于内核模式驱动程序的调用,NtXxxZwXxx 版本的 Windows 本机系统服务例程的行为方式可能以不同的方式处理和解释输入参数。 有关 NtXxxZwXxx 例程之间的关系的详细信息,请参阅 使用 Nt 和 Zw 版本的本机系统服务例程

如果指定了首选 NUMA 节点,则 ExtendedParameters 是基于堆栈的扩展参数。

只能指定扩展参数的一个实例。

转换为此 API 下游预期的基于 1 的 numa 节点编号。

要求

要求 价值
最低支持的客户端 Windows 10 版本 1803
标头 ntifs.h
NtosKrnl.lib
DLL NtosKrnl.exe

另请参阅

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection