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