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。
有关如何使用 ServiceName、InstanceName 和 InstancePort 参数来撰写 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
- 将 ServiceName 参数设置为服务实例的主机的 DNS 名称。 这是 SPN 的主机组件。
- 将 InstanceName 和 引用 参数设置为 NULL。
-
将 InstancePort 参数设置为零。 如果 InstancePort 为非零,SPN 的格式如下:
<service class>/<host>:<instance port>/<referrer>
若要使用“<ServiceClass>/<主机>生成 SPN:<InstancePort>”格式
- 将 InstanceName 参数设置为服务实例的主机的 DNS 名称。 这是主机组件。
- 将 ServiceName 参数设置为标识服务实例的字符串。 例如,它可以是此服务实例的服务连接点的可分辨名称。
- 将 引用 参数设置为 NULL。
-
将 InstancePort 参数设置为零。 如果 InstancePort 为非零,SPN 的格式如下:
<service class>/<host>:<instance port>/<service name>
<service class>/<host>:<instance port>/<referrer>
其中,如果
字符串参数不能包含正斜杠 (/) 字符,因为它用于分隔 SPN 的组件。
注意
dsparse.h 标头将 DsMakeSpn 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista |
支持的最低服务器 | Windows Server 2008 |
目标平台 | 窗户 |
标头 | dsparse.h (包括 Ntdsapi.h) |
库 | Ntdsapi.lib |
DLL | Ntdsapi.dll |