前に Active Directory 内のユーザやグループの検索について、手順とコードを書きました。
その際、まずは検索のルート(起点)になる DirectoryEntry を作成する必要があって、コードでは LDAP のパスを受け取る DirectoryEntry のコンストラクタを使って作成しました。
一般的に企業や学校などの組織では、クライアントPCはドメインに参加していて、ドメインのユーザはそのPCからドメインにログオンすると思うので、ちゃんと検索できるはずです。
Domain オブジェクトの取得の時にも書いたんですが、自分の環境上、ローカルログオンしてても同じようにできないかなぁと思って試してみたら、手順4「クエリを実行して結果を取得する」ところ(DirectorySearcher.FindAll メソッドの呼出し)で例外がスローされました。
COMException : 指定されたドメインがないか、またはアクセスできません。
ルートの DirectoryEntry はインスタンスが作られてたんですが、これ自体、プロパティにアクセスすると上記例外がスローされるようです。
ってことでローカルログオンしてても検索できるようにするには、ルートの DirectoryEntry の作成方法を変える必要があります。
それは、コンストラクタではなく Domain オブジェクト(Domain クラスのインスタンス)を取得してそのオブジェクトの GetDirectoryEntry メソッドでルートの DirectoryEntry を作成します。
Domain.GetDirectoryEntry メソッドはドメインを表す DirectoryEntry オブジェクトを返すので、丁度いんじゃないかなと思います。
サンプルアプリの方はこれを使って(プライベートメソッドにして)ルートの DirectoryEntry を作成することにします。