FsRtlCreateSectionForDataScan 函数 (ntifs.h)

FsRtlCreateSectionForDataScan 例程创建一个 section 对象。 请极其谨慎地使用此例程。 (请参阅以下 备注 部分。)

语法

NTSTATUS FsRtlCreateSectionForDataScan(
  [out]           PHANDLE            SectionHandle,
  [out]           PVOID              *SectionObject,
  [out, optional] PLARGE_INTEGER     SectionFileSize,
  [in]            PFILE_OBJECT       FileObject,
  [in]            ACCESS_MASK        DesiredAccess,
  [in, optional]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional]  PLARGE_INTEGER     MaximumSize,
  [in]            ULONG              SectionPageProtection,
  [in]            ULONG              AllocationAttributes,
  [in]            ULONG              Flags
);

参数

[out] SectionHandle

指向调用方分配的变量的指针,该变量接收节对象的不透明句柄。

[out] SectionObject

指向调用方分配的变量的指针,该变量接收指向 section 对象的不透明指针。

[out, optional] SectionFileSize

指向调用方分配的变量的指针,该变量在创建节对象时接收文件的大小(以字节为单位)。 此参数是可选的,可以为 NULL

[in] FileObject

打开的文件的文件对象。 section 对象将由指定的文件提供支持。 此参数是必需的,不能为 NULL

[in] DesiredAccess

将节对象所需的访问权限指定为以下 一个或多个ACCESS_MASK 标志。

DesiredAccess 标志 允许调用方访问
SECTION_MAP_READ 读取分区的视图。
SECTION_MAP_WRITE 写入节的视图。
SECTION_QUERY 查询 section 对象以获取有关节的信息。 驱动程序应设置此标志。
SECTION_ALL_ACCESS 由前面的标志以及由 STANDARD_RIGHTS_REQUIRED 定义的所有操作。 (有关STANDARD_RIGHTS_REQUIRED的详细信息,请参阅 ACCESS_MASK.)

[in, optional] ObjectAttributes

指向 OBJECT_ATTRIBUTES 结构的指针,该结构指定对象名称和其他属性。 使用 InitializeObjectAttributes 宏初始化此结构。 由于 FsRtlCreateSectionForDataScan 将此对象插入进程句柄表,因此调用方在调用 InitializeObjectAttributes 时必须指定 OBJ_KERNEL_HANDLE 属性。

[in, optional] MaximumSize

此参数留待将来使用。

[in] SectionPageProtection

指定要在节中的每个页面上放置的保护。 指定以下值之一。 此参数是必需的,不能为零。

标志 含义
PAGE_READONLY 启用对已提交页面区域的只读访问。 尝试写入已提交区域会导致访问冲突。 如果系统区分只读访问和执行访问,则尝试在已提交的区域中执行代码会导致访问冲突。
PAGE_READWRITE 启用对已提交页面区域的读取和写入访问。

[in] AllocationAttributes

SEC_XXX 标志的位掩码确定节的分配属性。 指定以下一个或多个值。 此参数是必需的,不能为零。

标志 含义
SEC_COMMIT 为分区的所有页面分配内存中或磁盘上的分页文件中的物理存储。 这是默认设置。 请注意,此标志是必需的,不能省略。
SEC_FILE FileObject 参数指定的文件是映射文件。

[in] Flags

此参数留待将来使用。

返回值

FsRtlCreateSectionForDataScan 返回STATUS_SUCCESS或相应的 NTSTATUS 值,例如以下值之一:

返回代码 说明
STATUS_END_OF_FILE
FileObject 参数指定的文件大小为零。 这是错误代码。
STATUS_FILE_LOCK_CONFLICT
FileObject 参数指定的文件已锁定。 这是错误代码。
STATUS_INSUFFICIENT_RESOURCES
FsRtlCreateSectionForDataScan 遇到池分配失败。 这是错误代码。
STATUS_INVALID_FILE_FOR_SECTION
FileObject 参数指定的文件不支持节。 这是错误代码。
STATUS_INVALID_PARAMETER_8
为 SectionPageProtection 参数指定的值无效。 这是错误代码。
STATUS_INVALID_PARAMETER_9
调用方为 AllocationAttributes 参数指定了无效值。 这是错误代码。
STATUS_PRIVILEGE_NOT_HELD

调用方没有创建具有 DesiredAccess 参数中指定的访问权限的节对象所需的权限。 这是错误代码。

注解

重要FsRtlCreateSectionForDataScan 例程仅在尚未创建 FileObject 参数中指定的文件对象的句柄的情况下使用, (通常在处理创建后操作) 。 如果驱动程序具有文件对象的句柄或可以获取文件对象的句柄,则驱动程序应改用 ZwCreateSection 例程。
 
不再需要此例程创建的 section 对象后,请确保通过调用 ZwClose 例程关闭 section 对象的句柄 (SectionHandle) ,并通过调用 ObDereferenceObject 例程 () 取消引用 section 对象本身。

有关创建映射分区和内存视图的详细信息,请参阅 分区对象和视图。 另请参阅Microsoft Windows SDK中的 CreateFileMapping 例程的文档。

要求

要求
最低受支持的客户端 Windows 2000 Service Pack 4 更新汇总 (SP4) ;适用于 Windows XP Service Pack 2 的筛选器管理器汇总 (SP2) 。
最低受支持的服务器 Microsoft Windows Server 2003 SP1
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

ACCESS_MASK

CcPurgeCacheSection

MmFlushImageSection

MmForceSectionClosed

ZwCreateSection