DsMakeSpnA 函数 (dsparse.h)

DsMakeSpn 函数构造标识服务实例的服务主体名称(SPN)。

客户端应用程序使用此函数组成 SPN,该 SPN 用于对服务实例进行身份验证。 例如,客户端可以在 InitializeSecurityContext 函数的 pszTargetName 参数中传递 SPN。

语法

DSPARSE DWORD DsMakeSpnA(
  [in]           LPCSTR ServiceClass,
  [in]           LPCSTR ServiceName,
  [in, optional] LPCSTR InstanceName,
  [in]           USHORT InstancePort,
  [in, optional] LPCSTR Referrer,
  [in, out]      DWORD  *pcSpnLength,
  [out]          LPSTR  pszSpn
);

参数

[in] ServiceClass

指向指定服务类的常量以 null 结尾的字符串的指针。 此参数可以是该服务唯一的任何字符串;可以接受协议名称,例如 ldap 或 GUID 的字符串形式。

[in] ServiceName

指向常量以 null 结尾的字符串的指针,该字符串指定 DNS 名称、NetBIOS 名称或可分辨名称(DN)。 此参数必须是非NULL

有关如何使用 ServiceNameInstanceNameInstancePort 参数来撰写 SPN 的详细信息,请参阅以下“备注”部分。

[in, optional] InstanceName

指向常量以 null 结尾的字符串的指针,该字符串指定服务的实例的主机的 DNS 名称或 IP 地址。

如果 ServiceName 指定服务主机的 DNS 或 NetBIOS 名称,则必须 InstanceName 参数 NULL

如果 ServiceName 指定 DNS 域名、DNS SRV 记录的名称或可分辨名称(例如服务连接点的 DN),则 InstanceName 参数必须指定服务主机的 DNS 或 NetBIOS 名称。

[in] InstancePort

服务的实例的端口号。 将 0 用于默认端口。 如果此参数为零,SPN 不包括端口号。

[in, optional] Referrer

指向常量以 null 结尾的字符串的指针,该字符串指定给定 IP 地址引用的主机的 DNS 名称。 除非 ServiceName 参数指定 IP 地址,否则将忽略此参数。

[in, out] pcSpnLength

指向包含将接收新构造 SPN 的缓冲区长度(以字符为单位)的变量的指针。 此值可以是 0,以提前请求最终缓冲区大小。

pcSpnLength 参数还接收所创建的 SPN 的实际长度,包括终止 null 字符。

[out] pszSpn

指向接收构造的 SPN 的以 null 结尾的字符串的指针。 此缓冲区应为 pcSpnLength指定的长度。 pszSpn 参数可能 NULL,以提前请求最终缓冲区大小。

返回值

如果函数返回 SPN,则返回值 ERROR_SUCCESS。 如果函数失败,则返回值可以是以下错误代码之一。

言论

DsMakeSpn 函数生成的 SPN 的格式取决于输入参数。 有两种基本格式。 这两种格式以 ServiceClass 字符串开头,后跟主机名和可选的 InstancePort 组件。

注意 基于主机的服务使用此格式。
 

使用“<ServiceClass>/<主机>”格式生成 SPN

  1. ServiceName 参数设置为服务实例的主机的 DNS 名称。 这是 SPN 的主机组件。
  2. InstanceName引用 参数设置为 NULL
  3. InstancePort 参数设置为零。 如果 InstancePort 为非零,SPN 的格式如下:
    <service class>/<host>:<instance port>/<referrer>
    
注释 此格式由可复制服务使用。
 

若要使用“<ServiceClass>/<主机>生成 SPN:<InstancePort>”格式

  1. InstanceName 参数设置为服务实例的主机的 DNS 名称。 这是主机组件。
  2. ServiceName 参数设置为标识服务实例的字符串。 例如,它可以是此服务实例的服务连接点的可分辨名称。
  3. 引用 参数设置为 NULL
  4. InstancePort 参数设置为零。 如果 InstancePort 为非零,SPN 的格式如下:
    <service class>/<host>:<instance port>/<service name>
    
仅当 ServiceName 参数指定服务的主机的 IP 地址时,才使用 Referenceer 参数。 在这种情况下,引用者 指定将 IP 地址指定为引荐的计算机的 DNS 名称。 SPN 具有以下格式:
<service class>/<host>:<instance port>/<referrer>

其中,如果 InstanceName 为 NULL,则主机组件是 InstanceName 字符串或 ServiceName 字符串,InstancePort 组件是可选的。

字符串参数不能包含正斜杠 (/) 字符,因为它用于分隔 SPN 的组件。

注意

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

要求

要求 价值
最低支持的客户端 Windows Vista
支持的最低服务器 Windows Server 2008
目标平台 窗户
标头 dsparse.h (包括 Ntdsapi.h)
Ntdsapi.lib
DLL Ntdsapi.dll

另请参阅

域控制器和复制管理功能

InitializeSecurityContext