次の方法で共有


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

DNS 名、NetBIOS 名、または識別名 (DN) を指定する、null で終わる定数文字列へのポインター。 このパラメーターは、null以外である必要があります。

ServiceNameInstanceName、および InstancePort パラメーターを使用して SPN を作成する方法の詳細については、次の「解説」セクションを参照してください。

[in, optional] InstanceName

サービスのインスタンスのホストの DNS 名または IP アドレスを指定する、null で終わる定数文字列へのポインター。

ServiceName がサービス ホスト コンピューターの DNS または NetBIOS 名を指定する場合、InstanceName パラメーターは NULLする必要があります。

ServiceName が DNS ドメイン名、DNS SRV レコードの名前、またはサービス接続ポイントの DN などの識別名を指定する場合、InstanceName パラメーターは、サービス ホスト コンピューターの DNS または NetBIOS 名を指定する必要があります。

[in] InstancePort

サービスのインスタンスのポート番号。 既定のポートには 0 を使用します。 このパラメーターが 0 の場合、SPN にはポート番号は含まれません。

[in, optional] Referrer

IP アドレス紹介を提供したホストの DNS 名を指定する、null で終わる定数文字列へのポインター。 ServiceName パラメーターで IP アドレスが指定されていない限り、このパラメーターは無視されます。

[in, out] pcSpnLength

新しく構築された SPN を受け取るバッファーの長さを文字数で表す変数へのポインター。 この値は、最終的なバッファー サイズを事前に要求するために 0 にすることができます。

pcSpnLength パラメーターは、作成された SPN の実際の長さ (終端の null 文字を含む) も受け取ります。

[out] pszSpn

構築された SPN を受け取る null で終わる文字列へのポインター。 このバッファーは、pcSpnLengthで指定された長さである必要があります。 pszSpn パラメーターは、最終的なバッファー サイズを事前に要求するために NULL を できます。

戻り値

関数が SPN を返す場合、戻り値は ERROR_SUCCESS。 関数が失敗した場合、戻り値は次のいずれかのエラー コードになります。

備考

DsMakeSpn 関数によって生成される SPN の形式は、入力パラメーターによって異なります。 2 つの基本的な形式があります。 どちらの形式も、ServiceClass 文字列の後にホスト コンピューター名と、オプションの InstancePort コンポーネントで始まります。

この形式は、ホスト ベースのサービスで使用されます。
 

"<ServiceClass>/<ホスト>" 形式の SPN を生成するには

  1. ServiceName パラメーターを、サービス インスタンスのホスト コンピューターの DNS 名に設定します。 これは SPN のホスト コンポーネントです。
  2. InstanceName パラメーターと Referrer パラメーターを NULL設定します。
  3. InstancePort パラメーターを 0 に設定します。 InstancePort が 0 以外の場合、SPN の形式は次のようになります。
    <service class>/<host>:<instance port>/<referrer>
    
この形式は、レプリカ可能なサービスで使用されます。
 

"<ServiceClass>/<ホスト>を使用して SPN を生成するには: InstancePort>" 形式を<

  1. InstanceName パラメーターを、サービス インスタンスのホスト コンピューターの DNS 名に設定します。 これがホスト コンポーネントです。
  2. ServiceName パラメーターを、サービスのインスタンスを識別する文字列に設定します。 たとえば、このサービス インスタンスのサービス接続ポイントの識別名を指定できます。
  3. Referrer パラメーターを NULL設定します。
  4. InstancePort パラメーターを 0 に設定します。 InstancePort が 0 以外の場合、SPN の形式は次のようになります。
    <service class>/<host>:<instance port>/<service name>
    
Referrer パラメーターは、ServiceName パラメーターがサービスのホスト コンピューターの IP アドレスを指定する場合にのみ使用されます。 この場合、参照元 は、紹介として IP アドレスを指定したコンピューターの DNS 名を指定します。 SPN の形式は次のとおりです。
<service class>/<host>:<instance port>/<referrer>

ホスト コンポーネントは、InstanceName が NULLInstancePort コンポーネントが省略可能な場合は、InstanceName 文字列または ServiceName 文字列です。

文字列パラメーターは、SPN のコンポーネントを区切るために使用されるため、スラッシュ (/) 文字を含めることはできません。

手記

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

必要条件

要件 価値
サポートされる最小クライアント Windows Vista
サポートされる最小サーバー Windows Server 2008
ターゲット プラットフォーム の ウィンドウズ
ヘッダー dsparse.h (Ntdsapi.h を含む)
ライブラリ Ntdsapi.lib
DLL Ntdsapi.dll

関連項目

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

InitializeSecurityContext の