MakeAbsoluteSD函数通过使用自相关格式的安全描述符作为模板,以绝对格式创建安全描述符。
BOOL MakeAbsoluteSD(
PSECURITY_DESCRIPTOR 【pSelfRelativeSecurityDescriptor】, | //地址自相关SD |
PSECURITY_DESCRIPTOR 【pAbsoluteSecurityDescriptor】, | //绝对SD地址 |
LPDWORD 【lpdwAbsoluteSecurityDescriptorSize】, | //绝对SD大小的地址 |
PACL 【pDacl】, | //自由ACL的地址 |
LPDWORD 【lpdwDaclSize】, | //自由ACL大小的地址 |
PACL 【pSacl】, | //系统ACL的地址 |
LPDWORD 【lpdwSaclSize】, | //系统ACL大小的地址 |
PSID 【pOwner】, | //所有者SID的地址 |
LPDWORD 【lpdwOwnerSize】, | //所有者SID大小的地址 |
PSID 【pPrimaryGroup】, | //主组SID的地址 |
LPDWORD 【lpdwPrimaryGroupSize】 | //组SID的大小的地址 |
); |
参数
【pSelfRelativeSecurityDescriptor】
以自相关格式指向SECURITY_DESCRIPTOR结构。该函数创建此安全描述符的绝对格式版本,而不修改原始安全描述符。
【pAbsoluteSecurityDescriptor】
指向功能填充绝对格式安全描述符主体的缓冲区。此信息格式为SECURITY_DESCRIPTOR结构。
【lpdwAbsoluteSecurityDescriptorSize】
指向指定【pAbsoluteSecurityDescriptor】参数指向的缓冲区大小的变量。如果缓冲区不足以用于安全描述符,则该函数将失败,并将此变量设置为最小所需大小。
【pDacl】
指向一个缓冲区,该函数用绝对格式安全描述符的自由访问控制列表(ACL)填充。绝对格式安全描述符的主体引用了这个指针。
【lpdwDaclSize】
指向指定【pDacl】参数指向的缓冲区大小的变量。如果缓冲区不足以达到ACL,则该函数将失败,并将此变量设置为最小所需大小。
【pSacl】
指向缓冲区,该函数填充绝对格式安全描述符的系统ACL。绝对格式安全描述符的主体引用了这个指针。
【lpdwSaclSize】
指向指定【pSacl】参数指向的缓冲区大小的变量。如果缓冲区不足以达到ACL,则该函数将失败,并将此变量设置为最小所需大小。
【pOwner】
指向缓冲区的函数填充绝对格式安全描述符的所有者的安全标识符(SID)。绝对格式安全描述符的主体引用了这个指针。
【lpdwOwnerSize】
指向指定【pOwner】参数指向的缓冲区大小的变量。如果缓冲区不足以达到SID,则该函数将失败,并将此变量设置为最小所需大小。
【pPrimaryGroup】
指向缓冲区的函数填充绝对格式安全描述符的主组的SID。绝对格式安全描述符的主体引用了这个指针。
【lpdwPrimaryGroupSize】
指向指定【pPrimaryGroup】参数指向的缓冲区大小的变量。如果缓冲区不足以达到SID,则该函数将失败,并将此变量设置为最小所需大小。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
绝对格式的安全描述符包含指向其包含的信息的指针,而不是信息本身。自相关格式的安全描述符包含连续的内存块中的信息。在自相关安全描述符中,SECURITY_DESCRIPTOR结构始终启动信息,但安全描述符的其他组件可以按任何顺序跟随结构。代替使用存储器地址,自相关安全描述符的组件通过从安全描述符的开头的偏移来标识。当安全描述符必须存储在软盘上或通过通信协议传输时,此格式很有用。
将安全对象复制到各种媒体的服务器可以使用MakeAbsoluteSD函数从自相关安全描述符和MakeSelfRelativeSD函数创建绝对安全描述符,以从绝对安全描述符创建自相关安全描述符。
也可以看看