[New - Windows NT]
BuildSecurityDescriptor函数分配和初始化一个新的安全描述符。安全描述符是一个不透明的结构,其中包含与对象相关联的安全信息。该函数可以通过将指定的安全信息与现有安全描述符中的信息合并来初始化新的安全描述符。如果不指定现有安全描述符,则该函数将根据指定的安全性信息初始化新的安全描述符。
BuildSecurityDescriptor创建一个自相关安全描述符,这意味着安全描述符将SECURITY_DESCRIPTOR结构和关联的安全性信息存储在连续的内存块中。自相关格式使得安全描述符适合于存储在流中。
DWORD BuildSecurityDescriptor(
PTRUSTEE 【pOwner】, | //识别新安全描述符的所有者 |
PTRUSTEE 【PGROUP】, | //识别新的安全描述符的组 |
ULONG 【cCountOfAccessEntries】, | //列表中的访问控制条目数 |
PEXPLICIT_ACCESS 【pListOfAccessEntries】, | //指向DACL的访问控制条目列表的指针 |
ULONG 【cCountOfAuditEntries】, | //列表中审计控制项的数量 |
PEXPLICIT_ACCESS 【pListOfAuditEntries】, | //指向SACL的审计控制项列表的指针 |
PSECURITY_DESCRIPTOR 【pOldSD】, | //指向现有安全描述符的指针 |
PULONG 【pSizeNewSD】, | //指向新的安全描述符的大小 |
PSECURITY_DESCRIPTOR * 【pNewSD】 | //接收新安全描述符的指针 |
); |
参数
【pOwner】
指向TRUSTEE结构的指针,用于标识新安全描述符的所有者。如果结构使用TRUSTEE_IS_NAME表单,BuildSecurityDescriptor将查找与指定受托人名称相关联的SID.
如果此参数为NULL,则该函数使用来自【pOldSD】指向的原始安全描述符的所有者SID。如果【pOldSD】为NULL,或者【pOldSD】中的所有者SID为NULL,则新安全描述符中的所有者SID为NULL。
【PGROUP】
指向TRUSTEE结构的指针,用于标识新安全描述符的主组SID。如果结构使用TRUSTEE_IS_NAME表单,BuildSecurityDescriptor将查找与指定受托人名称关联的SID。
如果此参数为NULL,该函数将使用【pOldSD】指向的原始安全描述符中的组SID。如果【pOldSD】为NULL,或者如果【pOldSD】中的组SID为NULL,则新安全描述符中的组SID为NULL。
【cCountOfAccessEntries】
指定【pListOfAccessEntries】阵列【.】中EXPLICIT_ACCESS个结构的数量
【pListOfAccessEntries】
指向描述新安全描述符的DACL的访问控制信息的EXPLICIT_ACCESS结构数组的指针。该函数通过将数组中的信息与【pOldSD】中的DACL(如果有)合并来创建新的DACL。如果【pOldSD】为NULL,或者如果【pOldSD】中的DACL为NULL,则该函数仅基于数组中的信息创建一个新的DACL。有关从EXPLICIT_ACCESS结构数组创建ACL的规则的说明,请参阅SetEntriesInAcl函数。
如果【pListOfAccessEntries】为NULL,则新的安全描述符将从【pOldSD】获取DACL。在这种情况下,如果【pOldSD】为NULL,或者如果【pOldSD】中的DACL为NULL,则新的DACL为NULL。
【cCountOfAuditEntries】
指定【pListOfAuditEntries】数组【.】中EXPLICIT_ACCESS个结构的数量
【pListOfAuditEntries】
指向描述新安全描述符的SACL的审计控制信息的EXPLICIT_ACCESS结构数组的指针。该函数通过将数组中的信息与【pOldSD】中的SACL(如果有)合并来创建新的SACL。如果【pOldSD】为NULL,或者【pOldSD】中的SACL为NULL,则该函数仅基于数组中的信息创建一个新的SACL。
如果【pListOfAuditEntries】为NULL,则新的安全描述符将从【pOldSD】获取SACL。在这种情况下,如果【pOldSD】为NULL,或者【pOldSD】中的SACL为NULL,则新的SACL为NULL。
【pOldSD】
指向现有的自相关SECURITY_DESCRIPTOR结构及其相关的安全信息。该函数通过将指定的所有者,组,访问控制和审计控制信息与此安全描述符中的信息合并来构建新的安全描述符。此参数可以为NULL。
【pSizeNewSD】
指向ULONG变量的指针,该变量接收返回的安全描述符的大小(以字节为单位)。
【pNewSD】
指向接收到新安全描述符的指针的变量的指针。该函数为新的安全描述符分配内存。您必须调用LocalFree函数来释放返回的缓冲区。
返回值
如果函数成功,则返回值为ERROR_SUCCESS。
如果函数失败,返回值是在WINERROR.H中定义的非零错误代码。
备注
BuildSecurityDescriptor功能适用于实现或暴露其对象上的安全性的受信任的服务器。该函数使用适合于序列化到流中的自相关安全描述符,并将其存储到可信服务器可能需要的磁盘上。
也可以看看
ACL, EXPLICIT_ACCESS, LocalFree, SECURITY_DESCRIPTOR, SetEntriesInAcl, SID, TRUSTEE