以前、ネイティブ ADSI オブジェクトについて書きました。
ドメインユーザの場合、IADsUser オブジェクトとして扱えるので、ドメインユーザを表す DomainUser クラスには Disabled プロパティの実装で IADsUser.AccountDisabled プロパティにアクセスしてます。
primaryGroupID は元々 IADsUser に対応するプロパティはないので、DirectoryEntry.Properties プロパティから属性を指定して取得してます。
EmailAddress、FirstName、FullName、LastName、OfficeName、TelephoneNumber プロパティでは IADsUser に対応するプロパティ(EmailAddress、FirstName、FullName、LastName、OfficeLocations、TelephoneNumber)があるのに(OfficeLocations と TelephoneNumber は Object 型)、DirectoryEntry.Properties プロパティから属性を指定(mail、givenName、displayName、sn、physicalDeliveryOfficeName、telephoneNumber)して取得してます。
これら6つのプロパティは電子メール、名、表示名、姓、事業所、電話番号なんですが、なんで IADsUser じゃなくて わざわざ属性を文字列で指定する DirectoryEntry の方を使ってるかというと、必須じゃないからです。
これらはテキストなので設定してない場合、DirectoryEntry の方は null を返すのに対し、IADsUser の方は例外(COMException)がスローされます。
なので DirectoryEntry の方を使ってます。
IADsUser も null を返してくれれば IADsUser の方を使うんですけどねぇ。
IADsUser.AccountDisabled プロパティは「アカウントは無効」かどうかを表す Boolean 型で、例外がスローされることはないので問題ないです。
逆に DirectoryEntry の方は直接対応する属性がないので、IADsUser の方を使う方がいいです。
アカウントに関する部分については近いうちに詳しく書こうと思います。
まぁ実装の仕方次第なんですが DirectoryEntry と IADsUser をうまく使うのがいいのかなと思います。