GetObjectとADsGetObjectでのバインド
GetObject関数とADsGetObject関数は、認証なしでディレクトリサービスオブジェクトにバインドするために使用されます。 アプリケーションは、ディレクトリサービスデータにアクセスするときに資格情報を提供する必要はありません。 ADSIは、呼び出し元スレッドのセキュリティコンテキストを使用します。 ただし、セキュリティで保護された認証が失敗した場合、ADSIはnullユーザー名とnullパスワードを使用して単純なバインドを実行しようとします。 単純なバインドが成功すると、バインドのユーザーコンテキストはGuestになります。 単純なバインドでは、プレーンテキスト認証が使用されます。 ユーザー名やパスワードはネットワーク経由で送信されないため、これはセキュリティ上の問題ではありません。
GetObject関数は、Visual Basicなど、オートメーションをサポートする言語でディレクトリサービスオブジェクトにバインドするために使用されます。 GetObject関数には、モニカー文字列が必要です。 ADSIでは、バインド文字列はモニカー文字列です。
CやC++など、オートメーションを直接サポートしない言語では、ADSIにはディレクトリサービスオブジェクトにバインドするためのADsGetObject関数が用意されています。 または、MkParseDisplayName関数とMkParseDisplayNameEx関数を使用して、GetObjectと同じ結果を得ることもできます。
LocalSystemアカウントで実行されているサービスの場合、GetObjectとADsGetObjectによって使用されるセキュリティコンテキストは、サービスが実行されているコンピューターによって異なります。 サービスがドメインコントローラーでLocalSystemとして実行されている場合、サービスにはActive Directoryへのシステムレベルのフルアクセス権があります。 サービスがDCで実行されていない場合、サービスには、サービスが実行されているコンピューターのコンピューターアカウントに付与されたアクセス権と特権があります。これは、システムレベルのアクセスよりも大幅に機能が低下します。
例
次のVisual Basicコード例は、GetObject関数を使用してオブジェクトにバインドする方法を示しています。
Dim myUser as IADs
Set myUser = GetObject("LDAP://CN=jeffsmith,DC=fabrikam,DC=com")
次のC++コード例は、ADsGetObject関数を使用してオブジェクトにバインドする方法を示しています。
IADs *pObject;
HRESULT hr;
// Initialize COM.
CoInitialize(NULL);
hr = ADsGetObject(L"LDAP://CN=jeffsmith,DC=fabrikam,DC=com",
IID_IADs,
(void**) &pObject);
if(SUCCEEDED(hr))
{
// Use the object.
// Release the object.
pObject->Release()
}
// Uninitialize COM.
CoUninitialize();