GetNamedSecurityInfoA 函数 (aclapi.h)

GetNamedSecurityInfo 函数检索名称指定的对象的 安全描述符 的副本。

语法

DWORD GetNamedSecurityInfoA(
  [in]            LPCSTR               pObjectName,
  [in]            SE_OBJECT_TYPE       ObjectType,
  [in]            SECURITY_INFORMATION SecurityInfo,
  [out, optional] PSID                 *ppsidOwner,
  [out, optional] PSID                 *ppsidGroup,
  [out, optional] PACL                 *ppDacl,
  [out, optional] PACL                 *ppSacl,
  [out, optional] PSECURITY_DESCRIPTOR *ppSecurityDescriptor
);

参数

[in] pObjectName

指向以 null 结尾的字符串的指针,该字符串指定要从中检索安全信息的对象的名称。 有关不同对象类型的字符串格式的说明,请参阅 SE_OBJECT_TYPE

[in] ObjectType

指定 SE_OBJECT_TYPE 枚举中的一个值,该值指示由 pObjectName 参数命名的对象的类型。

[in] SecurityInfo

一组位标志,指示要检索的安全信息的类型。 此参数可以是 SECURITY_INFORMATION 位标志的组合。

[out, optional] ppsidOwner

指向一个变量的指针,该变量接收指向 安全描述符中所有者 SID 的指针,ppSecurityDescriptorNULL(如果安全描述符没有所有者 SID)。 仅当设置OWNER_SECURITY_INFORMATION标志时,返回的指针才有效。 此外,如果不需要所有者 SID,则可以 NULL 此参数。

[out, optional] ppsidGroup

指向在返回的安全描述符中接收指向主组 SID 的指针的变量的指针,如果安全描述符没有组 SID,则 NULL。 仅当设置GROUP_SECURITY_INFORMATION标志时,返回的指针才有效。 此外,如果不需要组 SID,则可以将此参数 NULL

[out, optional] ppDacl

指向在返回的安全描述符中接收指向 DACL 的指针的变量的指针,如果安全描述符没有 DACL,则 NULL。 仅当设置DACL_SECURITY_INFORMATION标志时,返回的指针才有效。 此外,如果不需要 DACL,则可以 NULL 此参数。

[out, optional] ppSacl

指向一个变量的指针,该变量在返回的安全描述符中接收指向 SACL 的指针;如果安全描述符没有 SACL,则为 NULL NULL。 仅当设置SACL_SECURITY_INFORMATION标志时,返回的指针才有效。 此外,如果不需要 SACL,则可以 NULL 此参数。

[out, optional] ppSecurityDescriptor

指向接收指向对象安全描述符的指针的变量的指针。 使用完指针后,通过调用 LocalFree 函数释放返回的缓冲区。

如果任何一个 ppsidOwnerppsidGroupppDaclppSacl 参数都不 NULL,则此参数是必需的。

返回值

如果函数成功,则返回值ERROR_SUCCESS。

如果函数失败,则返回值为 WinError.h 中定义的非零错误代码。

言论

如果任何 ppsidOwnerppsidGroupppDaclppSacl 参数都是非NULL,并且 SecurityInfo 参数指定从对象中检索它们, 这些参数将指向在 ppSecurityDescriptor中返回 安全描述符 中的相应参数。 如果安全描述符不包含请求的信息,则相应的参数将设置为 NULL

若要从对象的安全描述符读取所有者、组或 DACL,对象的 DACL 必须授予对调用方READ_CONTROL访问权限,或者调用方必须是对象的所有者。

若要读取对象的系统访问控制列表,必须为调用过程启用SE_SECURITY_NAME特权。 有关启用特权的安全影响的信息,请参阅 使用特殊特权运行。

可以将 GetNamedSecurityInfo 函数用于以下类型的对象:

  • NTFS 文件系统上的本地或远程文件或目录
  • 本地或远程打印机
  • 本地或远程 Windows 服务
  • 网络共享
  • 注册表项
  • 信号灯、事件、互斥体和可等待计时器
  • 文件映射对象
  • 目录服务对象
此函数不处理争用条件。 如果线程在另一个线程更改对象的安全描述符的大致时间调用此函数,则此函数可能会失败。

此函数以纯文本传输信息。 除非系统已关闭签名,但不会执行加密,否则此函数传输的信息将签名。

有关通过用户帐户、组帐户或登录会话控制对对象的访问的详细信息,请参阅 DACL 如何控制对对象的访问

例子

有关使用 GetNamedSecurityInfo的示例,请参阅 修改对象的 ACL。

注意

aclapi.h 标头将 GetNamedSecurityInfo 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows XP [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2003 [桌面应用 |UWP 应用]
目标平台 窗户
标头 aclapi.h
Advapi32.lib
DLL Advapi32.dll

另请参阅

ACL

访问控制

基本访问控制函数

GetSecurityInfo

LocalFree

特权常量

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SE_OBJECT_TYPE

SID

SetNamedSecurityInfo

SetSecurityInfo