DsServerRegisterSpn 函数为基于主机的服务组成两个 SPN。 这些名称基于本地计算机的 DNS 和 NetBIOS 名称。 该函数修改指定帐户或与调用线程关联的帐户的 servicePrincipalName 属性。 该函数注册或取消注册 SPN。
基于主机的服务是一个服务实例,它提供与其主计算机标识的服务,这与客户端没有运行服务实例的主机的首选项的可复制服务区分开来。
语法
NTDSAPI DWORD DsServerRegisterSpnA(
[in] DS_SPN_WRITE_OP Operation,
[in] LPCSTR ServiceClass,
[in, optional] LPCSTR UserObjectDN
);
参数
[in] Operation
指定 DsServerRegisterSpn 应执行的操作
DS_SPN_ADD_SPN_OP
将 SPN 添加到用户或计算机帐户。
DS_SPN_DELETE_SPN_OP
从帐户中删除指定的 SPN。
DS_SPN_REPLACE_SPN_OP
删除当前在用户或计算机帐户上注册的所有 SPN,并将其替换为新的 SPN。
[in] ServiceClass
指向指定服务类的常量以 null 结尾的字符串的指针。 此参数可以是该服务唯一的任何字符串;协议名称(例如 ldap)或 GUID 的字符串形式都将起作用。
[in, optional] UserObjectDN
指向常量以 null 结尾的字符串的指针,该字符串指定要写入 SPN 的用户或计算机帐户对象的可分辨名称。 如果此参数 NULL,DsServerRegisterSpn 写入与调用线程关联的主用户或模拟用户的帐户对象。 如果线程在 LocalSystem 帐户的安全上下文中运行,该函数将写入本地计算机的帐户对象。
返回值
如果函数成功注册了一个或多个 SPN,它将返回 ERROR_SUCCESS。 修改以宽松方式执行,以便添加已存在的值不会返回错误。
言论
由 DsServerRegisterSpn 函数组成的两个 SPN 具有以下格式:
<ServiceClass>/<host>
在一个 SPN 中,主计算机是本地计算机的完全限定 DNS 名称。 在其他 SPN 中,主机组件是本地计算机的 NetBIOS 名称。
在大多数情况下,DsServerRegisterSpn 调用方必须具有域管理员权限才能成功修改帐户对象的 servicePrincipalName 属性。 此规则的例外是,如果调用线程在 LocalSystem 帐户下运行,
注意
ntdsapi.h 标头将 DsServerRegisterSpn 定义为基于 UNICODE 预处理器常量定义自动选择此函数的 ANSI 或 Unicode 版本的别名。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
| 要求 | 价值 |
|---|---|
| 最低支持的客户端 | Windows Vista |
| 支持的最低服务器 | Windows Server 2008 |
| 目标平台 | 窗户 |
| 标头 | ntdsapi.h |
| 库 | Ntdsapi.lib |
| DLL | Ntdsapi.dll |