DsServerRegisterSpnA 函数 (ntdsapi.h)

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 帐户的安全上下文中运行,则函数将写入本地计算机的 account 对象。

返回值

如果函数成功注册一个或多个 SPN,则返回 ERROR_SUCCESS。 修改是允许执行的,因此添加已存在的值不会返回错误。

注解

DsServerRegisterSpn 函数组成的两个 SPN 具有以下格式:

<ServiceClass>/<host>

在一个 SPN 中,主计算机是本地计算机的完全限定 DNS 名称。 在其他 SPN 中,主机组件是本地计算机的 NetBIOS 名称。

在大多数情况下, DsServerRegisterSpn 调用方必须具有域管理员权限才能成功修改帐户对象的 servicePrincipalName 属性。 此规则的例外情况是,如果调用线程在 LocalSystem 帐户下运行,则如果 UserObjectDN 参数为 NULL 或指定本地计算机帐户的可分辨名称,则允许 DsServerRegisterSpn

注意

ntdsapi.h 标头将 DsServerRegisterSpn 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
最低受支持的客户端 Windows Vista
最低受支持的服务器 Windows Server 2008
目标平台 Windows
标头 ntdsapi.h
Library Ntdsapi.lib
DLL Ntdsapi.dll

另请参阅

域控制器和复制管理功能

DsGetSpn

DsWriteAccountSpn