プロパティの型
ディレクトリ オブジェクトで使用されるプロパティにはいくつかの型があります。Active Directory ドメイン サービス スキーマでは、これらのプロパティの型は属性構文と呼ばれます。属性構文の詳細と Active Directory ドメイン サービスで使用できる属性構文の一覧については、MSDN ライブラリ (https://go.microsoft.com/fwlink/?LinkID=27252) で Active Directory 属性の構文に関するページを参照してください。
次の各トピックには、System.DirectoryServices を使用してプロパティの型を読み取る方法および書き込む方法を示すコード例があります。
- Boolean プロパティ型
- DateTime プロパティ
- バイナリを持つ DN プロパティ型
- 大きい整数のプロパティ型
- オクテット文字列 (SID) プロパティ型
- セキュリティ記述子のプロパティ型
- 文字列プロパティ型
解釈されるデータ型
System.DirectoryServices 名前空間からプロパティ値を取得するには 2 とおりの方法があります。1 つは、Properties プロパティのメンバを使用する方法です。もう 1 つは、DirectorySearcher クラスで取得される ResultPropertyValueCollection コレクションのメンバを使用する方法です。これらはそれぞれ、実際のデータ型がプロパティのスキーマ データ型に依存する汎用オブジェクトを返します。Properties プロパティは、IADs.GetInfoEx メソッドと同じオブジェクトの種類を返します。IADs.GetInfoEx メソッドの詳細については、MSDN ライブラリ (https://go.microsoft.com/fwlink/?LinkID=27252) で IADs::GetInfoEx に関するページを参照してください。Item プロパティは、一部のデータ型を .NET Framework データ型に変換します。Active Directory ドメイン サービス スキーマ型とそれらに関連付けられた解釈されるデータ型および解釈されないデータ型を、次の表に示します。次の表に示されている Active Directory ドメイン サービス スキーマ型または COM インターフェイス名の詳細については、MSDN ライブラリ (https://go.microsoft.com/fwlink/?LinkID=27252) で、該当する型または COM インターフェイス名に関する情報を参照してください。
Active Directory ドメイン サービス スキーマ型 | 解釈されない型 (Properties によって返される) | 解釈される型 (ResultPropertyValueCollection によって返される) |
---|---|---|
Boolean |
Boolean |
|
Enumeration |
Int32 |
|
Enumeration (Delivery-Mechanism) |
Int32 |
Int32 |
Enumeration (Export-Information-Level) |
Int32 |
Int32 |
Enumeration (Preferred-Delivery-Method) |
Int32 |
Int32 |
Integer |
Int32 |
Int32 |
Interval |
IADsLargeInteger にキャストできる COM オブジェクト。 |
|
LargeInteger |
IADsLargeInteger にキャストできる COM オブジェクト。 |
Int64 |
Object(Access-Point) |
サポートなし |
サポートなし |
Object(DN-Binary) |
IADsDNWithBinary にキャストできる COM オブジェクト。 |
Object(DN-Binary) によって指定される形式の識別名とバイナリ データを含む String。 |
Object(DN-String) |
IADsDNWithString にキャストできる COM オブジェクト。 |
Object(DN-String) によって指定される形式の識別名と文字列データを含む String。 |
Object(DS-DN) |
String |
String |
Object(OR-Name) |
IADsDNWithBinary にキャストできる COM オブジェクト。 |
Object(DN-Binary) によって指定される形式の識別名とバイナリ データを含む String。 |
Object(Presentation-Address) |
String |
String |
Object(Replica-Link) |
Byte[] |
Byte[] |
String(Generalized-Time) |
DateTime |
|
String(IA5) |
String |
String |
String(NT-Sec-Desc) |
IADsSecurityDescriptor にキャストできる COM オブジェクト。 |
Byte[] |
String(Numeric) |
String |
String |
String(Object-Identifier) |
String |
String |
String(Octet) |
Byte[] |
Byte[] |
String(Printable) |
String |
String |
String(Sid) |
Byte[] |
Byte[] |
String(Teletex) |
String |
String |
String(Unicode) |
String |
String |
String(UTC-Time) |
DateTime |
DateTime |
ADSI オブジェクト プロパティ値の解釈
LargeInteger など、一部の Active Directory ドメイン サービス構文型については、System.DirectoryServices が COM オブジェクトとしてプロパティ値を返します。この COM オブジェクトは、適切な ADSI 型にキャストして、実際のプロパティ型を取得する必要があります。たとえば、lastLogon プロパティは、Interval 構文に属します。System.DirectoryServices は、Interval 構文に対するプロパティ値を、IADsLargeInteger インターフェイスをサポートする COM オブジェクトとして返します。これらの要素の詳細については、MSDN ライブラリ (https://go.microsoft.com/fwlink/?LinkID=27252) で LargeInteger、Interval、IADsLargeInteger、および lastLogon に関するページを参照してください。
次の C# の例は、COM オブジェクトを ActiveDs.IADsLargeInteger オブジェクトにキャストして、COM オブジェクトから IADsLargeInteger インターフェイスを取得する方法を示しています。ActiveDS 名前空間のオブジェクトを使用するアプリケーションを開発している場合は、アプリケーションのコンパイルおよびリンク時に、ActiveDS タイプ ライブラリ activeds.tlb を参照します。
object obj = entry.Properties["lastLogon"];
ActiveDs.IADsLargeInteger largeIntADSI;
largeIntADSI = (ActiveDs.IADsLargeInteger)obj;
System.DirectoryServices が COM オブジェクトとして返す構文型と、各構文型の関連付けられた ADSI インターフェイスを次の表に示します。次の表に示されている構文型または ADSI インターフェイスの詳細については、MSDN ライブラリ (https://go.microsoft.com/fwlink/?LinkID=27252) で、該当する構文型または ADSI インターフェイスに関する情報を参照してください。
構文型 | ADSI インターフェイス |
---|---|
Interval |
IADsLargeInteger |
LargeInteger |
IADsLargeInteger |
Object(DN-Binary) |
IADsDNWithBinary |
Object(DN-String) |
IADsDNWithString |
Object(OR-Name) |
IADsDNWithBinary |
String(NT-Sec-Desc) |
IADsSecurityDescriptor |
次の C# の例は、ADSI COM オブジェクトの適切なインターフェイスを取得する方法を示しています。この例では、InvalidCastException 例外を使用して、キャストが有効かどうかを判断します。
static string GetADSIComObjectValue(object obj)
{
if(obj.GetType().Name.Equals("__ComObject"))
{
/*
Try IADsSecurityDescriptor. This is returned for the following AD
syntax type:
String(NT-Sec-Desc)
*/
try
{
ActiveDs.IADsSecurityDescriptor secDesc;
secDesc = (ActiveDs.IADsSecurityDescriptor)obj;
return "IADsSecurityDescriptor:" + secDesc.Owner.ToString();
}
catch (System.InvalidCastException)
{
}
/*
Try IADsLargeInteger. This is returned for the following AD syntax
types:
Interval
LargeInteger
*/
try
{
ActiveDs.IADsLargeInteger largeIntADSI;
largeIntADSI = (ActiveDs.IADsLargeInteger)obj;
Int64 largeInt = largeIntADSI.HighPart * 0x100000000;
largeInt += largeIntADSI.LowPart;
return "IADsLargeInteger:" + largeInt.ToString();
}
catch (System.InvalidCastException)
{
}
/*
Try IADsDNWithBinary. This is returned for the following AD syntax
types:
Object(DN-Binary)
Object(OR-Name)
*/
try
{
ActiveDs.IADsDNWithBinary dnWithBinary;
dnWithBinary = (ActiveDs.IADsDNWithBinary)obj;
return "IADsDNWithBinary:" +
dnWithBinary.DNString + ":" +
dnWithBinary.BinaryValue.ToString();
}
catch (System.InvalidCastException)
{
}
/*
Try IADsDNWithString. This is returned for the following AD syntax
type:
Object(DN-String)
*/
try
{
ActiveDs.IADsDNWithString dnWithString;
dnWithString = (ActiveDs.IADsDNWithString)obj;
return "IADsDNWithString:" +
dnWithString.DNString + ":" +
dnWithString.StringValue;
}
catch (System.InvalidCastException)
{
}
throw new System.ArgumentException("Unknown COM Object type.");
}
else
{
throw new System.ArgumentException("Object is not a COM Object.");
}
}
関連項目
リファレンス
System.DirectoryServices
DirectoryEntry
ResultPropertyValueCollection
DirectorySearcher
概念
Send comments about this topic to Microsoft.
Copyright © 2007 by Microsoft Corporation. All rights reserved.