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>/<host>" 形式の SPN を生成するには

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

"<ServiceClass>/<host>:<InstancePort>" 形式の SPN を生成するには

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

ここで、ホスト コンポーネントは InstanceName 文字列、InstanceNameNULL の場合は ServiceName 文字列、InstancePort コンポーネントは省略可能です。

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

注意

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

要件

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

こちらもご覧ください

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

InitializeSecurityContext