共用方式為


DsGetSpnA 函式 (ntdsapi.h)

DsGetSpn 函式會建構一或多個服務主體名稱的陣列。 陣列中的每個名稱都會識別服務的實例。 這些 SPN 可以使用 DsWriteAccountSpn 函式向目錄服務註冊。

語法

NTDSAPI DWORD DsGetSpnA(
  [in]           DS_SPN_NAME_TYPE ServiceType,
  [in]           LPCSTR           ServiceClass,
  [in, optional] LPCSTR           ServiceName,
  [in]           USHORT           InstancePort,
  [in]           USHORT           cInstanceNames,
  [in, optional] LPCSTR           *pInstanceNames,
  [in, optional] const USHORT     *pInstancePorts,
  [out]          DWORD            *pcSpn,
  [out]          LPSTR            **prpszSpn
);

參數

[in] ServiceType

識別要撰寫的 SPN 格式。 ServiceType 參數可以有下列其中一個值。

DS_SPN_DNS_HOST、DS_SPN_DN_HOST、DS_SPN_NB_HOST

SPN 的格式如下。

ServiceClass/ InstanceName: InstancePort

ServiceName 參數必須 NULL。 這是主機型服務的 SPN 格式,可提供其主計算機所識別的服務。 InstancePort 元件是選擇性的。

DS_SPN_DOMAIN,DS_SPN_NB_DOMAIN

SPN 的格式如下。

ServiceClass/ InstanceName: InstancePort/ ServiceName

ServiceName 參數必須是網域的 DNS 名稱或 DN。 此格式用於提供服務給指定網域的可複製服務。

DS_SPN_SERVICE

SPN 的格式如下。

ServiceClass/ InstanceName: InstancePort/ ServiceName

ServiceName 參數必須是識別服務實例的正式 DN 或 DNS 名稱。 例如,它可以是SRV記錄的 DNS 名稱,或此服務實例的服務連接點辨別名稱。

[in] ServiceClass

指定服務類別之常數 Null 終止字串的指標;例如 HTTP。 一般而言,這可以是服務唯一的任何字串。

[in, optional] ServiceName

常數 Null 終止字串的指標,指定服務的 DNS 名稱或辨別名稱(DN)。 主機型服務不需要 ServiceName。 如需詳細資訊,請參閱 ServiceType 參數的描述,以取得 ServiceName的可能值。

[in] InstancePort

指定服務實例的埠號碼。 如果此值為零,SPN 不會包含埠號碼。

[in] cInstanceNames

指定 pInstanceNamespInstancePorts 陣列中的元素數目。 如果這個值不是零,pInstanceNames 必須指向 cInstanceNames 字串 的陣列,而 pInstancePorts 可以是 NULLcInstanceNames 埠號碼數組的指標。 如果此值為零,DsGetSpn 只會傳回 prpszSpn 陣列中的一個 SPN,pInstanceNames,而且會忽略 pInstancePorts

[in, optional] pInstanceNames

指定額外實例名稱的 Null 終止字串陣列指標(不適用於主機名)。 如果 cInstanceNames 為零,則會忽略此參數。 在此情況下,如果指定 DS_SPN_NB_HOSTDS_SPN_NB_DOMAIN,SPN InstanceName 元件預設為本機計算機的完整 DNS 名稱或 NetBIOS 名稱。

[in, optional] pInstancePorts

額外實例埠陣列的指標。 如果這個值不是非NULL,則必須指向 cInstanceNames 埠號碼的陣列。 如果此值 NULL,則 SPN 不包含埠號碼。 如果 cInstanceNames 為零,則會忽略此參數。

[out] pcSpn

接收 prpszSpn中所包含 SPN 數目之變數的指標。

[out] prpszSpn

接收SPN陣列指標之變數的指標。 此陣列必須使用 DsFreeSpnArray釋放。

傳回值

如果函式傳回 SPN 的陣列,則傳回值會 ERROR_SUCCESS

如果函式失敗,傳回值可以是下列其中一個錯誤碼。

言論

為在多部主計算機上執行的複寫服務實例建立SPN

  1. cInstanceNames 設定為實例數目。
  2. pInstanceNames 陣列中指定主電腦的名稱。

為在相同主計算機上執行的多個服務實例建立SPN

  1. cInstanceNames 設定為實例數目。
  2. pInstanceNames 陣列中的每個項目設定為主電腦的 DNS 名稱。
  3. 使用 pInstancePorts 參數,為每個實例指定唯一埠號碼陣列,以釐清 SPN。
字串參數不能包含正斜線 (/),用來分隔 SPN 的元件。

具有適當許可權的應用程式,通常是網域系統管理員,可以呼叫 DsWriteAccountSpn 函式,在服務執行所在的使用者或計算機帳戶上註冊一或多個 SPN。 用戶端接著可以使用SPN來驗證服務。

注意

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

要求

要求 價值
最低支援的用戶端 Windows Vista
支援的最低伺服器 Windows Server 2008
目標平臺 窗戶
標頭 ntdsapi.h
連結庫 Ntdsapi.lib
DLL Ntdsapi.dll

另請參閱

域控制器和復寫管理功能

DsFreeSpnArray

DsWriteAccountSpn