DsMakeSpnA 函式 (dsparse.h)

DsMakeSpn 函式會建構服務主體名稱, (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

指定 DNS 名稱、NetBIOS 名稱或辨別名稱的常數 null 終止字串指標, (DN) 。 此參數必須是非 NULL

如需如何使用 ServiceNameInstanceNameInstancePort 參數來撰寫 SPN 的詳細資訊,請參閱下列一節。

[in, optional] InstanceName

指定服務實例之主機 DNS 名稱或IP位址之常數 Null 終止字串的指標。

如果 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>/<host>」 格式的 SPN

  1. ServiceName 參數設定為服務實例主電腦的 DNS 名稱。 這是SPN的主機組件。
  2. InstanceNameReferrer 參數設定為 NULL
  3. InstancePort 參數設定為零。 如果 InstancePort 為非零,SPN 的格式如下:
    <service class>/<host>:<instance port>/<referrer>
    
注意 此格式是由可複製的服務使用。
 

產生具有 「<ServiceClass>/<host>:<InstancePort>」 格式的 SPN

  1. InstanceName 參數設定為服務實例主電腦的 DNS 名稱。 這是主機組件。
  2. ServiceName 參數設定為識別服務實例的字串。 例如,它可以是這個服務實例之服務連接點的辨別名稱。
  3. [參考者 ] 參數設定為 NULL
  4. InstancePort 參數設定為零。 如果 InstancePort 為非零,SPN 的格式如下:
    <service class>/<host>:<instance port>/<service name>
    
只有在 ServiceName 參數指定服務主電腦的 IP 位址時,才會使用 Referrer 參數。 在此情況下, 「查閱者 」會指定提供IP位址做為轉介的電腦 DNS 名稱。 SPN 的格式如下:
<service class>/<host>:<instance port>/<referrer>

其中,如果 InstanceNameNULL,則主機組件是 InstanceName 字串或 ServiceName 字串,而 InstancePort 元件是選擇性的。

字串參數不能包含 /) 字元的正斜線 (,因為它用來分隔 SPN 的元件。

注意

dsparse.h 標頭會將 DsMakeSpn 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
最低支援的用戶端 Windows Vista
最低支援的伺服器 Windows Server 2008
目標平台 Windows
標頭 dsparse.h (包含 Ntdsapi.h)
程式庫 Ntdsapi.lib
Dll Ntdsapi.dll

另請參閱

域控制器和復寫管理功能

InitializeSecurityContext