DsInheritSecurityIdentityW 函数 (ntdsapi.h)
DsInheritSecurityIdentity 函数将 SrcPrincipal 的 objectSid 和 sidHistory 属性追加到 DstPrincipal 的 sidHistory,然后删除 SrcPrincipal,全部在单个事务中。 若要确保此操作是原子的, SrcPrincipal 和 DstPrincipal 必须位于同一域中, 并且 hDS 必须绑定到该域中具有正确权限的域控制器。
语法
NTDSAPI DWORD DsInheritSecurityIdentityW(
[in] HANDLE hDS,
[in] DWORD Flags,
[in] LPCWSTR SrcPrincipal,
[in] LPCWSTR DstPrincipal
);
参数
[in] hDS
包含从 DSBind 或 DSBindWithCred 函数获取的目录服务句柄。
[in] Flags
保留供将来使用。 必须为零。
[in] SrcPrincipal
指向以 null 结尾的字符串的指针,该字符串指定源域中 (用户或组) 的安全主体的名称。 此名称是相对于域的 SAM 名称。
[in] DstPrincipal
指向以 null 结尾的字符串的指针,该字符串指定目标域中 (用户或组) 的安全主体的名称。 此相对于域的 SAM 名称标识其 sidHistory 属性将使用 SrcPrincipal 的 SID 更新的主体。
返回值
返回系统或 RPC 错误代码,包括以下内容。
注解
对于操作系统升级域,应用程序跨升级和非升级的域,可能同时在林内外具有同一逻辑实体的安全主体。
当所有升级的域都已加入同一个林时, DsInheritSecurityIdentity 会消除重复对象,同时确保其余对象具有属于其各自已删除对象的所有安全权限和特权。
DsInheritSecurityIdentity 实现:
- 验证 SrcPrincipal 和 DstPrincipal 是否在同一域中。
- 验证域在绑定到服务器时是否可写。
- 验证是否为域启用了审核。
- 验证调用方是否是域的域管理员的成员。
- 验证域是否处于本机模式。
- 验证 SrcPrincipal 是否存在,它是安全主体,并已读取其 objectSid 和 sidHistory 属性。
- 验证 DstPrincipal 是否存在、是否是安全主体,并已读取审核和验证所需的某些属性。
- 仅当整个操作在完成时提交时,才删除数据库中的 SrcPrincipal 。 如果调用方没有删除权限或 SrcPrincipal 具有子级,此操作将失败。
- 如果 SrcPrincipal 或 DstPrincipal 的 objectSid 是已知的 SID,则操作失败。
- 将 objectSid 和 sidHistory ((如果存在 SrcPrincipal) )添加到 DstPrincipal 的 sidHistory。
- 强制审核事件,如果审核失败,操作将失败。
- 在目录服务日志中输入事件。 不要将此与安全审核日志混淆。
注意
ntdsapi.h 标头将 DsInheritSecurityIdentity 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista |
最低受支持的服务器 | Windows Server 2008 |
目标平台 | Windows |
标头 | ntdsapi.h |
Library | Ntdsapi.lib |
DLL | Ntdsapi.dll |