FsRtlCreateSectionForDataScan 函数 (ntifs.h)

FsRtlCreateSectionForDataScan 例程创建节对象。 请谨慎使用此例程。 (请参阅以下 备注 部分。

语法

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

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

[out, optional] SectionFileSize

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

[in] FileObject

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

[in] DesiredAccess

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

DesiredAccess 标志 允许调用方
SECTION_MAP_READ 阅读该部分的视图。
SECTION_MAP_WRITE 写入分区的视图。
SECTION_QUERY 查询节对象以获取有关该节的信息。 驱动程序应设置此标志。
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 参数中指定的访问权限的节对象所需的权限。 这是一个错误代码。

言论

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

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

要求

要求 价值
最低支持的客户端 Windows 2000 Service Pack 4 的更新汇总(SP4):Windows XP Service Pack 2(SP2)的筛选器管理器汇总。
支持的最低服务器 Microsoft Windows Server 2003 SP1
目标平台 普遍
标头 ntifs.h (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

ACCESS_MASK

CcPurgeCacheSection

mmFlushImagesection

mmForceSectionClosed

ZwCreateSection