By Adam
ISecurityInformation::GetSecurity
该函数通过句柄找到某一对象,并获取该对象的安全描述符。
DWORD GetSecurityInfo(
HANDLE handle,
SE_OBJECT_TYPE ObjectType,
SECURITY_INFORMATION SecurityInfo,
PSID* ppsidOwner,
PSID* ppsidGroup,
PACL* ppDacl,
PACL* ppSacl,
PSECURITY_DESCRIPTOR* ppSecurityDescriptor
);
变量
handle
[in] 该句柄变量用以指定GetSecurityInfo函数将获取哪个对象的安全描述符。
ObjectType
[in]指定对象类型的枚举型变量
SecurityInfo
[i]指定函数所获得的安全信息的类型,可以取以下值。
Value | Meaning |
---|---|
DACL_SECURITY_INFORMATION | 如果这个标志被设置, ppDacl 变量将接收对象的自主访问控制列表 |
GROUP_SECURITY_INFORMATION | 如果这个标志被设置, ppsidGroup变量将接收对象primary group的SID |
OWNER_SECURITY_INFORMATION | 如果这个标志被设置, ppsidOwner变量将接收对象拥有者的SID |
SACL_SECURITY_INFORMATION | 如果这个标志被设置, ppSacl 变量将接收对象的系统访问控制列表 |
[out] ppsidOwner是指向安全描述符中SID所有者的指针,该指针将返回到ppSecurityDescriptor。仅当对SecurityInfo设置了OWNER_SECURITY_INFORMATION时返回指针才有效。如果不需要SID所有者,该变量设置为NULL。
ppsidGroup[out] ppsidGroup是指向primary group SID的指针,该指针返回到ppSecurityDescriptor。仅当对SecurityInfo设置了GROUP_SECURITY_INFORMATION时返回指针才有效。如果不需要group SID,该变量设置为NULL。
ppDacl[out] ppDacl是指向DACL的指针,该指针返回到ppSecurityDescriptor。仅当对SecurityInfo设置了DACL_SECURITY_INFORMATION时返回指针才有效。如果不需要DACL
,该变量设置为NULL。
ppSacl[out] ppSacl是指向SACL的指针,该指针返回到ppSecurityDescriptor。仅当对SecurityInfo设置了SACL_SECURITY_INFORMATION时返回指针才有效。如果不需要SACL
,该变量设置为NULL。
ppSecurityDescriptor
返回值
如果函数成功,返回值为ERROR_SUCCESS。
如果函数失败,返回值为非零值,具体定义在Winerror.h中。
附注
如果ppsidOwner,ppsidGroup,ppDacl,以及ppSacl都是非空,并且SwcurityInfo指定了相应的类型,则前述的各个变量将接受其对应的指针,这些指针返回到ppSecurityDescriptor中。
当句柄被打开后,要从对象的安全描述符中读取Owner,group,或者DACL,调用程序必须得到读控制访问的许可。要得到读控制访问的许可,调用者必须是对象的拥有者或者对象的DACL必须被授予访问权。
当句柄被打开后,要从安全描述符中读取SACL,调用程序必须被授予ACCESS_SYSTEM_SECURITY的访问权。获得这个权限的适当方法是启用SE_SECURIYT_NAME特权,打开ACCESS_SYSTEM_SECURITY句柄,接着关闭特权。
需求
Client | Requires Windows XP, Windows 2000 Professional, or Windows NT Workstation 4.0. |
---|---|
Server | Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0. |
Header | Declared in Aclapi.h. |
Library | Link to Advapi32.lib. |
DLL | Requires Advapi32.dll. |