ADSI を使用して Active Directory へ接続する時に RPC エラーコード RPC_NT_CALL_FAILED_DNE 0xC002001C が返される

現象

アプリケーションが特定のユーザーに偽装 (Impersonate) して、複数のスレッドから ADSI を使用する場合にエラーコード RPC_NT_CALL_FAILED_DNE 0xC002001C が返される場合があります。

原因

偽装した複数のスレッドから Active Directory に接続する場合、RPC ではスレッド間の同期を考慮しないため、一方のスレッドの RPC 通信が完了した時に、タイミングによって他方のスレッドの RPC 接続が閉じられる現象が発生します。

回避策

再度 RPC 接続を実施するため、ADSI の呼び出し処理をリトライします。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

詳細

本現象は Windows Server 2008 R2 では発生しません。

なお、特定のサーバーを明示的に指定してバインドを行うことが運用上可能な場合は、バインディング文字列に特定のサーバ名を指定する方法も本現象の回避手段となります。サーバを指定してバインドを実行した場合、本現象の発生個所となる処理自体が実行されませんため、結果的に本現象を回避することが可能となるためです。

下記では "server01" に対して明示的にバインドする場合の例を示しています。サーバーの指定は NetBIOS 名、FQDN 名、IP アドレスの何れも使用できます。


hr = ADsOpenObject( L"LDAP://server01/CN=Jeff Smith,CN=users,DC=fabrikam,DC=com",
NULL, NULL, ADS_SECURE_AUTHENTICATION, IID_IDirectorySearch, (void**)&pDirSrch);








プロパティ

文書番号:2569635 - 最終更新日: 2016/09/29 - リビジョン: 1

フィードバック