バッチ書き込み/変更操作の高速バインドオプション
ディレクトリサービスオブジェクトがバインドされている場合、ADSIは、指定されたディレクトリオブジェクトを表すCOMオブジェクトを作成します。 バインド時に、ADSIは通常、オブジェクトのクラスに適したCOMインターフェイスを公開できるように、objectClass属性を取得します。 たとえば、ユーザーオブジェクトは、すべてのオブジェクトでサポートされている基本ADSIインターフェイスに加えて、IADsUserインターフェイスを公開します。 1回の操作では、これはパフォーマンスに影響しません。 ただし、低速接続で数百または数千のバインドを必要とするバッチ操作を実行し、それらの操作がディレクトリサービスにデータを書き込む場合は、より高速なバインドのために完全なオブジェクトサポートを交換することが望ましい場合があります。 これは高速バインドと呼ばれ、ADsOpenObjectまたはIADsOpenDSObject :: OpenDSObjectが呼び出されたときにADS_FAST_BINDフラグを指定することによって実現されます。
高速バインドには次の制限があります。
バインド操作は、ADsOpenObject関数またはIADsOpenDSObject :: OpenDSObjectメソッドを使用して実行する必要があります。 バインド操作は、ディレクトリサーバーに2回ではなく1回移動します。 ADSIはobjectClass属性を取得しないため、オブジェクトの基本ADSIインターフェイスのみを公開します。
COMオブジェクトでは、次のインターフェイスがサポートされています。
- IADs
- IADsContainer
- IDirectoryObject
- IDirectorySearch
- IADsPropertyList
- IADsObjectOptions
- ISupportErrorInfo
- IADsDeleteOps
IADsContainer :: GetObjectメソッドを使用して子オブジェクトにバインドする場合、子オブジェクトは親と同じ高速バインド特性を持ちます。
バインドされているオブジェクトの存在はバインド操作中に検証されないため、オブジェクトが存在しない場合、後続のメソッド呼び出しは失敗します。 このため、高速バインドは、存在することがわかっているオブジェクトに対してのみ使用する必要があります。たとえば、バインドされているオブジェクトの識別名を返すクエリを実行した直後などです。
ADSI拡張機能は、topクラスのオブジェクトに対して公開されます。 そのため、上記の基本ADSIインターフェイスの拡張機能のみが公開されます。