安全描述符是由SECURITY_DESCRIPTOR结构及其关联的安全信息组成的不透明结构。安全信息可以包括以下内容:
*对象的所有者和主组的安全标识符(SID)。
*自由访问控制列表(DACL),用于指定系统授予特定用户或组的对象访问类型。
*系统访问控制列表(SACL),用于指定为对象生成审核记录的访问尝试的类型。
应用程序不得直接操纵安全描述符的内容。Win32 API提供了获取和设置安全描述符组件的功能。
Windows NT 4.0版引入了新的功能来处理安全描述符:BuildSecurityDescriptor和LookupSecurityDescriptorParts.
BuildSecurityDescriptor函数分配和初始化新的自相关安全描述符。BuildSecurityDescriptor使用EXPLICIT_ACCESS结构来指定DACL和SACL的信息;并使用TRUSTEE结构来指定所有者和主组。BuildSecurityDescriptor只能从指定的安全信息中初始化新的安全描述符;或者它可以将指定的安全信息与现有的自相关安全描述符中的信息进行合并。
LookupSecurityDescriptorParts函数从现有的自相关安全描述符中检索信息。像BuildSecurityDescriptor一样,LookupSecurityDescriptorParts功能使用TRUSTEE和EXPLICIT_ACCESS结构。这使得很容易调用LookupSecurityDescriptorParts从一个安全描述符中提取安全信息,然后调用BuildSecurityDescriptor使用提取的信息构建另一个安全描述符。
InitializeSecurityDescriptor函数初始化绝对格式的安全描述符,使其不具有所有者,主组,DACL或SACL。然后,您可以使用其他Win32函数来设置安全描述符的组件。
Windows NT 4.0版提供了GetSecurityInfo,SetSecurityInfo,GetNamedSecurityInfo和SetNamedSecurityInfo函数来获取和设置对象的安全描述符的组件。此外,您可以使用以下低级功能来获取或设置指定安全描述符的特定组件。请注意,该表中设置组件的功能只能使用绝对格式的安全描述符。
功能 | 描述 |
GetSecurityDescriptorControl | 从安全描述符检索修订和控制信息。 |
GetSecurityDescriptorDacl | 从安全描述符获取自由ACL。 |
GetSecurityDescriptorGroup | 从安全描述符检索主组安全标识符(SID)。 |
GetSecurityDescriptorLength | 返回安全描述符的长度。 |
GetSecurityDescriptorOwner | 从安全描述符检索所有者SID。 |
GetSecurityDescriptorSacl | 从安全描述符获取系统ACL。 |
SetSecurityDescriptorDacl | 将自由ACL放入安全描述符中,取代任何现有的自由ACL。 |
SetSecurityDescriptorGroup | 设置安全描述符的主组SID。 |
SetSecurityDescriptorOwner | 设置安全描述符的所有者SID。 |
SetSecurityDescriptorSacl | 将系统ACL放入安全描述符中,取代现有的任何系统ACL。 |
要检查安全描述符的修订级别和结构完整性,请调用IsValidSecurityDescriptor函数。