Active Directory データのプロパティ出力では、COM(ADSI)に対応してない初期版と 対応した COM 対応版について書きました。
出力対象のオブジェクトはユーザやグループ、コンピュータや OU など、Active Directory で扱う一般的なオブジェクトです。
そして出力されるプロパティ(属性)はオブジェクトの種類によって違いますし、プロパティ設定の有無によっても違います。
通常のプロパティ出力(サンプルでいう OutputProperties : VB版 C#版)はプロパティ(属性)が設定されているものしか出力対象になりません。セキュリティ記述子(nTSecurityDescriptor)も通常のプロパティ出力でしか出力できません。
サンプルでは通常のプロパティ出力のほかにオプションのプロパティ出力(OutputOptionalProperties)がありますが、nTSecurityDescriptor は必須プロパティなのでオプションのプロパティ出力では出力できないという意味です。
必須プロパティの出力(OutputMandatoryProperties)を実装すれば出力できます。
サンプルではプロパティ(属性)名でループして値を取得し、その値の型で処理を分けてます。
個人的には、上記のことを考慮するとプロパティ(属性)名で処理を分けるよりも値の型で処理を分ける方を優先させる方がいいのではと考えてます。
実際、セキュリティ記述子(nTSecurityDescriptor)の値の型は IADsSecurityDescriptor インターフェイスにキャストできますし、大きい整数は属性の数が多いので値の型で処理を分ける方がいいですしね。
セキュリティ記述子(nTSecurityDescriptor)の場合は、値を取得したらそこからアクセス制御リスト(IADsAccessControlList)を取得して、その要素であるアクセス制御エントリ(IADsAccessControlEntry)に設定されているプロパティの値を取得・出力してます。
ADSI の インターフェイス 3 つ必要ですね。
ただ、セキュリティ記述子関連は ADSI を使わなくても .NET(DirectoryEntry 関連クラス)にもあるので、ADSI を使わずに同じような形で出力できるはず。近いうちに試してみます。
セキュリティ記述子はどのオブジェクトにもあるし型もこの属性だけなので、プロパティ(属性)名で処理を分ければいいかなと思います。