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 文件系统不支持文件的安全描述符。因此,保证 SecurityDescriptor 参数指向的 64 KB 缓冲区足够大,以便保存返回 SECURITY_DESCRIPTOR 结构。

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

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

要求

要求 价值
目标平台 普遍
标头 fltkernel.h (包括 Fltkernel.h)
FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL

另请参阅

FILE_STREAM_INFORMATION

SECURITY_DESCRIPTOR

SECURITY_INFORMATION