FltQuerySecurityObject 函数 (fltkernel.h)

FltQuerySecurityObject 检索对象的安全描述符的副本。

语法

NTSTATUS FLTAPI FltQuerySecurityObject(
  [in]            PFLT_INSTANCE        Instance,
  [in]            PFILE_OBJECT         FileObject,
  [in]            SECURITY_INFORMATION SecurityInformation,
  [in, out]       PSECURITY_DESCRIPTOR SecurityDescriptor,
  [in]            ULONG                Length,
  [out, optional] PULONG               LengthNeeded
);

参数

[in] Instance

调用方不透明的实例指针。 此参数是必需的,不能为 NULL

[in] FileObject

正在查询其安全描述符的 对象的文件对象指针。 此参数是必需的,不能为 NULL

[in] SecurityInformation

SECURITY_INFORMATION 值。 此参数是必需的,必须是下列参数之一:

SecurityInformation 值 含义
OWNER_SECURITY_INFORMATION 正在查询对象的所有者标识符。 需要 READ_CONTROL 访问权限。
GROUP_SECURITY_INFORMATION 正在查询对象的主组标识符。 需要 READ_CONTROL 访问权限。
DACL_SECURITY_INFORMATION 正在查询对象的 DACL) (任意访问控制列表。 需要 READ_CONTROL 访问权限。
SACL_SECURITY_INFORMATION 正在查询对象的系统 ACL (SACL) 。 需要 ACCESS_SYSTEM_SECURITY 访问权限。

[in, out] SecurityDescriptor

指向调用方提供的输出缓冲区的指针,该缓冲区接收指定对象的安全描述符的副本。 SECURITY_DESCRIPTOR 结构以自相对格式返回。 此参数是可选的,可以为 NULL

[in] Length

SecurityDescriptor 缓冲区的大小(以字节为单位)。

[out, optional] LengthNeeded

指向调用方分配的变量的指针,该变量接收存储 SecurityDescriptor 参数指向的缓冲区中返回的复制安全描述符所需的字节数。 此参数是可选的,可以为 NULL

返回值

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

返回代码 说明
STATUS_ACCESS_DENIED
调用方没有所需的访问权限。 这是错误代码。
STATUS_BUFFER_TOO_SMALL
缓冲区太小,无法包含安全描述符。 未将任何安全信息复制到缓冲区。 这是错误代码。

注解

安全描述符可以采用绝对或自相对形式。 在自相对形式中,结构的所有成员都位于内存中。 在绝对形式中,结构仅包含指向其成员的指针。

NTFS 文件系统对写入文件磁盘的安全描述符的大小施加了 64 KB 的限制。 (FAT 文件系统不支持 files 的安全描述符。) 因此, SecurityDescriptor 参数指向的 64 KB 缓冲区保证足够大,足以容纳返回 SECURITY_DESCRIPTOR 结构。

FileObject 参数指向的对象可以表示命名数据流。 有关命名数据流的详细信息,请参阅 FILE_STREAM_INFORMATION

有关安全性和访问控制的详细信息,请参阅Microsoft Windows SDK文档。

要求

要求
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
Library FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL

另请参阅

FILE_STREAM_INFORMATION

SECURITY_DESCRIPTOR

SECURITY_INFORMATION