IADsOpenDSObject::OpenDSObject メソッド (iads.h)
IADsOpenDSObject::OpenDSObject メソッドは、指定された資格情報を使用して ADSI オブジェクトにバインドし、指定したオブジェクトへの IDispatch ポインターを取得します。
構文
HRESULT OpenDSObject(
[in] BSTR lpszDNName,
[in] BSTR lpszUserName,
[in] BSTR lpszPassword,
[in] long lnReserved,
[out] IDispatch **ppOleDsObj
);
パラメーター
[in] lpszDNName
ADSI オブジェクトの ADsPath を指定する null で終わる Unicode 文字列。 このパラメーターのバインド文字列の詳細と例については、LDAP ADsPathを参照してください。 特定のサーバー名を含む ADsPath で LDAP プロバイダーを使用する場合、lnReserved パラメーターに ADS_SERVER_BIND フラグを含める必要があります。
[in] lpszUserName
名前空間サーバーからのアクセス許可をセキュリティで保護するために使用するユーザー名を指定する、null で終わる Unicode 文字列。 詳細については、次の「解説」セクションを参照してください。
[in] lpszPassword
名前空間サーバーからアクセス許可を取得するために使用するパスワードを指定する、null で終わる Unicode 文字列。
[in] lnReserved
バインド オプションを定義するために使用される認証フラグ。 詳細については、ADS_AUTHENTICATION_ENUMを参照してください。
[out] ppOleDsObj
要求されたオブジェクトの IDispatch インターフェイスへのポインター。
戻り値
このメソッドは、IDispatch インターフェイスがこれらの資格情報を使用して正常に取得されたときの S_OK など、標準の戻り値をサポートします。
詳細については、「ADSI エラー コードの」を参照してください。
備考
このメソッドは、ユーザーの資格情報を検証するためだけに使用しないでください。
lnReserved
IADsOpenDSObject::OpenDSObject メソッドは、認証および暗号化されたユーザー資格情報をキャッシュに保持します。 キャッシュされた資格情報は、後続の操作で他のディレクトリ オブジェクトにバインドするために使用できます。 ADSI クライアント アプリケーションは、ユーザーから提供された資格情報をキャッシュしないでください。 代わりに、キャッシュを実行するために ADSI インフラストラクチャに依存する必要があります。 キャッシュされた資格情報を使用するには、lpszPassword を
Dim dso As IADsOpenDSObject
Dim obj1, obj2 As IADs
Dim szUsername As String
Dim szPassword As String
Set dso = GetObject("LDAP:")
' Insert code securely.
' Supply full credentials to initiate a server connection.
Set obj1 = dso.OpenDSObject( _
"LDAP://server1/CN=Dept1,DC=Fabrikam,DC=com", _
szUsername, _
szPassword, _
ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND)
' Perform an operation with the bound object, obj1
MsgBox obj1.Class
' Bind to another object with the cached user credential.
Set obj2 = dso.OpenDSObject( _
"LDAP://server1/CN=Dept2,DC=Fabrikam,DC=com", _
szUsername, _
szPassword, _
ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND)
MsgBox obj2.Class
IADsOpenDSObject::OpenDSObject 関数に渡される資格情報は、呼び出し元スレッドのセキュリティ コンテキストに影響を与えない特定のオブジェクトでのみ使用されます。 つまり、次のコード例では、IADsOpenDSObject::OpenDSObject を
Dim dso As IADsOpenDSObject
Dim obj1, obj2 As IADs
Dim szUsername As String
Dim szPassword As String
Set dso = GetObject("LDAP:")
' Insert code securely.
' Bind using full credentials.
Set obj1 = dso.OpenDSObject( _
"LDAP://server1/CN=Dept1,DC=Fabrikam,DC=com", _
szUsername, _
szPassword, _
ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND)
' Bind to another object with the default credentials.
Set obj2 = GetObject("LDAP://server1/CN=Dept2,DC=Fabrikam,DC=com")
サーバーレス バインディングでは、サーバー名 "server1" は明示的に指定されません。 代わりに、既定のサーバーが使用されます。 LDAP プロバイダーのみがサーバーレス バインディングをサポートします。 この機能を使用するには、クライアント コンピューターが Active Directory ドメイン上にある必要があります。 コンピューターからサーバーレス バインドを試行するには、ドメイン ユーザーとしてバインドする必要があります。
資格情報のキャッシュが正常に機能するためには、キャッシュ ハンドルを維持するためにオブジェクト参照を未処理のままにしておくことが重要です。 上記の例では、"obj1" を解放した後に "obj2" を開こうとすると、認証エラーが発生します。
LDAP プロバイダーを使用して特定のディレクトリ要求を正常に完了するために Kerberos 認証が必要な場合、lpszDNName バインディング文字列では、"LDAP://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com" などのサーバーレス ADsPath を使用するか、"LDAP://central3.corp.Fabrikam.com/CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com"。 フラット NETBIOS 名または短い DNS 名を使用してサーバーにバインドします。たとえば、"central3.corp.Fabrikam.com" ではなく短い名前 "central3" を使用すると、Kerberos 認証が生成される場合と、生成されない場合があります。
ADsOpenObject ヘルパー関数は、IADsOpenDSObject::OpenDSObject メソッドと同じ機能を提供します。
Active Directory の LDAP プロバイダーを使用すると、lpszUserName
- ユーザー アカウントの名前 ("jeffsmith" など)。 ユーザー名を単独で使用するには、lnReserved パラメーターに ADS_SECURE_AUTHENTICATION フラグのみを設定する必要があります。
- 以前のバージョンの Windows からのユーザー パス ("Fabrikam\jeffsmith" など)。
- "CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com" などの識別名。 DN を使用するには、lnReserved パラメーターを 0 にするか、ADS_USE_SSL フラグを含める必要があります
- "jeffsmith@Fabrikam.com" などのユーザー プリンシパル名 (UPN)。 UPN を使用するには、ターゲット ユーザー オブジェクトの userPrincipalName 属性に適切な UPN 値を割り当てる必要があります。
例
次のコード例は、IADsOpenDSObject を使用して、LDAP プロバイダーを介してセキュリティで保護された認証を使用して "Fabrikam" で "Administrator" ユーザー オブジェクトを開く方法を示しています。
Dim dso As IADsOpenDSObject
Dim domain As IADsDomain
Dim szUsername As String
Dim szPassword As String
On Error GoTo Cleanup
' Insert code to securely retrieve the user name and password.
Set dso = GetObject("LDAP:")
Set domain = dso.OpenDSObject("LDAP://Fabrikam", szUsername, _
szPassword, _
ADS_SECURE_AUTHENTICATION)
Cleanup:
If (Err.Number <> 0 ) Then
MsgBox("An error has occurred. " & Err.Number)
End If
Set dso = Nothing
Set domain = Nothing
次のコード例では、IADsOpenDSObject を使用して、LDAP プロバイダーを介して Active Directory オブジェクトを開きます。
IADsOpenDSObject *pDSO = NULL;
HRESULT hr = S_OK;
hr = ADsGetObject(L"LDAP:", IID_IADsOpenDSObject, (void**) &pDSO);
if (SUCCEEDED(hr))
{
IDispatch *pDisp;
hr = pDSO->OpenDSObject(CComBSTR("LDAP://DC=Fabrikam, DC=com"),
CComBSTR("jeffsmith@Fabrikam.com"),
CComBSTR("passwordhere"),
ADS_SECURE_AUTHENTICATION,
&pDisp);
pDSO->Release();
if (SUCCEEDED(hr))
{
IADs *pADs;
hr = pDisp->QueryInterface(IID_IADs, (void**) &pADs);
pDisp->Release();
if (SUCCEEDED(hr))
{
// Perform an object manipulation here.
pADs->Release();
}
}
}
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista |
サポートされる最小サーバー | Windows Server 2008 |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | iads.h |
DLL | Activeds.dll |
関連項目
ADsOpenObject の
バインド の
GetObject の
IDispatch の
LDAP ADsPath を
WNetAddConnetion2 の