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 初始化此结构。 如果调用方未在系统线程上下文中运行,则必须在调用 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,则该节由分页文件提供支持。 否则,节由指定的文件提供支持。
返回值
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”。
对于来自内核模式驱动程序的调用,Windows Native System Services 例程的 NtXxx 和 ZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxx 和 ZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000。 |
目标平台 | 通用 |
标头 | ntifs.h (包括 Wdm.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |