DsGetSpnA 関数 (ntdsapi.h)

DsGetSpn 関数は、1 つ以上のサービス プリンシパル名 (SPN) の配列を構築します。 配列内の各名前は、サービスのインスタンスを識別します。 これらの SPN は、 DsWriteAccountSpn 関数を使用してディレクトリ サービス (DS) に登録できます。

構文

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

サービスの DNS 名または識別名 (DN) を指定する、null で終わる定数文字列へのポインター。 ServiceName は、ホスト ベースのサービスには必要ありません。 詳細については、ServiceName の使用可能な値については、ServiceType パラメーターの説明を参照してください。

[in] InstancePort

サービス インスタンスのポート番号を指定します。 この値が 0 の場合、SPN にはポート番号は含まれません。

[in] cInstanceNames

pInstanceNames 配列および pInstancePorts 配列内の要素の数を指定します。 この値が 0 でない場合、 pInstanceNamescInstanceNames 文字列の配列を指す必要があり、 pInstancePortsNULL または cInstanceNames ポート番号の配列へのポインターにすることができます。 この値が 0 の場合、 DsGetSpnprpszSpn 配列内の 1 つの SPN のみを返し、 pInstanceNamespInstancePorts は無視されます。

[in, optional] pInstanceNames

余分なインスタンス名を指定する null で終わる文字列の配列へのポインター (ホスト名には使用されません)。 cInstanceNames が 0 の場合、このパラメーターは無視されます。 その場合、SPN の InstanceName コンポーネントは、 DS_SPN_NB_HOSTまたはDS_SPN_NB_DOMAIN が指定されている場合、既定ではローカル コンピューターの完全修飾 DNS 名または NetBIOS 名に設定されます。

[in, optional] pInstancePorts

追加のインスタンス ポートの配列へのポインター。 この値が NULL 以外の場合は、 cInstanceNames ポート番号の配列を指す必要があります。 この値が NULL の場合、SPN にはポート番号は含まれません。 cInstanceNames が 0 の場合、このパラメーターは無視されます。

[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 関数を呼び出して、サービスが実行されているユーザーまたはコンピューター アカウントに 1 つ以上の SPN を登録できます。 その後、クライアントは SPN を使用してサービスを認証できます。

注意

ntdsapi.h ヘッダーは、DSGetSpn をエイリアスとして定義します。このエイリアスは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
対象プラットフォーム Windows
ヘッダー ntdsapi.h
Library Ntdsapi.lib
[DLL] Ntdsapi.dll

こちらもご覧ください

ドメイン コントローラーとレプリケーション管理機能

DsFreeSpnArray

DsWriteAccountSpn