次の方法で共有


LDAP_REFERRAL_CALLBACK構造体 (winldap.h)

LDAP_REFERRAL_CALLBACK構造体は、接続の外部キャッシュを実装するために使用されます。 この構造は、紹介を追跡する場合にのみ使用されます。

構文

typedef struct LdapReferralCallback {
  ULONG                 SizeOfCallbacks;
  QUERYFORCONNECTION    *QueryForConnection;
  NOTIFYOFNEWCONNECTION *NotifyRoutine;
  DEREFERENCECONNECTION *DereferenceRoutine;
} LDAP_REFERRAL_CALLBACK, *PLDAP_REFERRAL_CALLBACK;

メンバー

SizeOfCallbacks

コールバックに必要なメモリの量。 このフィールドを に設定します sizeof(LDAP_REFERRAL_CALLBACK)

QueryForConnection

キャッシュされた接続が使用可能かどうかを判断するためのコールバック関数へのポインター。 詳細については、「解説」を参照してください。

NotifyRoutine

操作の完了後に新しい接続をキャッシュするか破棄するかを決定するコールバック関数へのポインター。 詳細については、「解説」を参照してください。

DereferenceRoutine

使用されていない接続を逆参照するためのコールバック関数へのポインター。 詳細については、「解説」を参照してください。

注釈

LDAP_REFERRAL_CALLBACK構造体を使用して、接続をキャッシュするためのメカニズムを実装します。 構造体には、クライアント コードに実装する 3 つのコールバック関数が含まれています。

QUERYFORCONNECTION: 接続が使用可能な場合、この関数は ConnectionToUse で使用する接続へのポインターを返す必要があります。 使用できる接続がない場合、関数は ConnectionToUseNULL に設定する必要があります。 このコールバック関数のシグネチャは次のとおりです。

typedef ULONG (_cdecl QUERYFORCONNECTION)(
    PLDAP       PrimaryConnection,
    PLDAP       ReferralFromConnection,
    PWCHAR      NewDN,
    PCHAR       HostName,
    ULONG       PortNumber,
    PVOID       SecAuthIdentity,    // If NULL, use CurrentUser below
    PVOID       CurrentUserToken,   // pointer to current user LUID.
    PLDAP       *ConnectionToUse
);

NOTIFYOFNEWCONNECTION: 参照を追跡する過程で新しい接続が作成された場合、ランタイムはこの関数を呼び出します。 接続をキャッシュする必要がない場合、この関数は FALSE を 返す必要があります。 FALSE が返されると、操作が完了すると接続が破棄されます。 接続の所有権を取得し、接続がキャッシュされる場合、関数は TRUE を 返す必要があります。 作成された新しい接続は、要求が開始されたプライマリ接続から現在のコールバックを継承していることに注意してください。 この関数のシグネチャは です。

typedef BOOLEAN (_cdecl NOTIFYOFNEWCONNECTION) 
    (
    PLDAP       PrimaryConnection,
    PLDAP       ReferralFromConnection,
    PWCHAR      NewDN,
    PCHAR       HostName,
    PLDAP       NewConnection,
    ULONG       PortNumber,
    PVOID       SecAuthIdentity,    // If null, use CurrentUser below.
    PVOID       CurrentUser,        // Pointer to current user LUID.
    ULONG       ErrorCodeFromBind   // If nonzero, bind to server failed.
    );

DEREFERENCECONNECTION: LDAP ランタイムは、この関数を呼び出して、不要になった接続を逆参照します。 接続は、 QueryForConnection の正常な呼び出しまたは NotifyOfNewConnection からの呼び出しから行われる可能性があります。 呼び出しが成功した場合、関数はLDAP_SUCCESSを返す必要があります。ただし、現在、ランタイムは戻り値を無視します。 この関数のシグネチャは次のとおりです。

typedef ULONG (_cdecl DEREFERENCECONNECTION)
    (
    PLDAP       PrimaryConnection,
    PLDAP       ConnectionToDereference
    );

コールバックを使用してキャッシュされた接続を取得するようにセッションを構成するには、 ldap_set_option (conn、LDAP_OPT_REFERRAL_CALLBACK、&referralRoutines) を呼び出します。 ここで、referralRoutines はルーチンを含む LDAP_REFERRAL_CALLBACK 構造体のアドレスです。 アドレスは NULL である可能性があります。この場合、LDAP ランタイムは呼び出しを行いません。

上記の 3 つの関数のパラメーターの説明は次のとおりです。

  • PrimaryConnection

    操作が最初に実行された LDAP 接続ハンドル。 たとえば、ldap_search、ldap_result、ldap_addなどの呼び出しに渡されるハンドル。

  • ReferralFromConnection

    現在追跡されている紹介を送信した接続。 紹介は、複数の "ホップ" にわたって追跡できます。 たとえば、紹介は元のサーバーから 2 番目のサーバーに、次に 2 番目のサーバーが 3 番目のサーバーに対して操作を参照できるなどです。 ReferralFromConnectionPrimaryConnection と同じ場合、最初の "ホップ" が追跡されます (元のサーバーから送信された紹介)。

  • NewDN

    参照されるオブジェクトの DN を含む、null で終わるワイド文字列へのポインター。

  • HostName

    参照されるサーバーの名前を含む null で終わる文字列へのポインター。は、接続を確立する必要があるサーバーです。

  • PortNumber 接続する必要がある参照先サーバー上のポート。
  • SecAuthIdentity

    紹介を追跡するときに使用される資格情報の SEC_WINNT_AUTH_IDENTITY または SEC_WINNT_AUTH_IDENTITY_EX 。ユーザーの既定の資格情報が使用されている場合は NULL

  • CurrentUserToken/CurrentUser

    接続が必要なユーザーの AuthenticationID LUID。 SecAuthIdentityNULL の場合は、このパラメーターを使用してユーザーを識別します。

  • NewConnection

    新しい接続の存在を読み上げるのに使用されます。

  • ErrorCodeFromBind

    新しく作成された接続 (NewConnection) にバインドしようとすると、ldap_bind_sから返されるエラー コード。

  • ConnectionToDereference

    逆参照する接続。

要件

要件
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
Header winldap.h

こちらもご覧ください

データ構造

ldap_set_option