ADSI 属性構文
ディレクトリ内の各属性には、構文が関連付けられています。 たとえば、整数、文字列、数値などです。 ADSI は、ネイティブ ディレクトリ構文にマップする独自の構文を定義します。 このセクションでは、ADSI の属性構文の種類について説明します。
識別名文字列
Syntax Type: ADSTYPE_DN_STRING
識別名は、2 つのオブジェクトをリンクする場合に便利です。 たとえば、Alice オブジェクトを Bob オブジェクトのマネージャーにするリンクを作成できます。 Alice オブジェクトが別の場所に移動すると、Alice と Bob の間のマネージャー リンクが自動的に更新されます。
識別名には、有効な識別名オブジェクトが含まれている必要があります。 識別名が有効な既存のオブジェクトに対応していない場合、ほとんどのサーバーは要求を拒否し、制約違反エラーを返します。
例 :
Set x = GetObject("LDAP://CN=Bob, OU=Sales,DC=Fabrikam, DC=com)
x.Put "manager", "CN=Alice, OU=Sales, DC=Fabrikam, DC=COM"
x.SetInfo
PADS_ATTR_INFO pInfo;
// .. IDirectoryObject::GetObjectAttribute
printf("%S\n", pInfo->pADsValues->DNString );
大文字と小文字の正確な文字列と大文字と小文字を無視する文字列
Syntax Types: ADSTYPE_CASE_IGNORE_STRING, ADSTYPE_CASE_EXACT_STRING.
大文字と小文字の正確な文字列は大文字と小文字を区別する文字列で、大文字と小文字を無視する文字列は大文字と小文字を区別しない文字列です。 ディレクトリ内の属性の大部分は、この構文を使用します。
Note
ディレクトリは、これを Unicode 文字列として格納する場合と格納しない場合があります。 ただし、ADSI は Unicode 文字列を受け入れて返します。
例:
Dim propList As IADsPropertyList
Set propList = GetObject("LDAP://DC=Fabrikam,DC=com")
Set propVal = New PropertyValue
' --- Property Value ---
propVal.CaseIgnoreString = "Fabrikam, Inc - Seattle, WA"
propVal.ADsType = ADSTYPE_CASE_IGNORE_STRING
印刷可能な文字列
Syntax Type: ADSTYPE_PRINTABLE_STRING
この構文は、"FABRIKAM" や "Fabrikam" など、比較した際に大文字と小文字が等しくないと見なされる文字列値を持つ属性に使用されます。 ADSI は、印刷可能な文字列の内容を受け入れます。実際に印刷可能かどうかを検証しません。
数値文字列
Syntax Type: ADSTYPE_NUMERIC_STRING
この構文では、文字列は印刷可能な文字列と一致しますが、比較ではすべての空白文字は無視されます。 ADSI は、この構文の値に数字とスペースのみが表示されているか確認するための値チェックを行いません。 Active Directory は数値文字列のコンテンツを受け入れます。文字が数値であることは確認しません。
UTC 時間
Syntax Type: ADSTYPE_UTC_TIME
この構文では、日付と時刻が 1 つの文字列に格納されます。 文字列形式は、(1) YYMMDD、(2) HHMM または HHMMSS (どちらも可能)、(3) "Z" という 3 つの連結部分で構成され、指定された日時がグリニッジ標準時 (GMT) であることを示し、"+/-HHMM" では指定された日時が GMT との差分がある現地時間であることを示します。 差分は、"GMT = 現地時間 + 差分" という数式に基づいています。
Note
年の最初の 2 桁は、この文字列には格納されません。
有効な値の例としては、"9101311455Z"、"910131145503Z"、"9101314455-0500"、"910131145503+0130" があります。 この文字列は 1 バイトの ASCII 文字として格納され、コード ページ番号は格納されません。
順序付けはサポートされていますが、文字列の意味の正しい解釈によってではなく、大文字と小文字を区別しない ASCII 文字列の並べ替えとしてのみ行われます。
任意の有効な文字列値を受け入れます。 文字列に有効な時刻文字列が含まれていることを確認する試みは行われません。
一般化された時間
Syntax Type: ADSTYPE_UTC_TIME
時刻値を格納する新しい属性が定義されている場合は、GeneralizedTime 構文を使用する必要があります。 GeneralizedTime 構文では、UTCTime のように 2 文字ではなく 4 文字を使用して年を表します。
GeneralizedTime 構文の形式は "YYYYMMDDHHMMSS.0Z" です。 許容される値の例として、"20010928060000.0Z" があります。 "Z" は時間差がないことを示します。 Active Directory では、日付/時刻がグリニッジ標準時 (GMT) として格納されます。 時刻の差分が指定されていない場合は、GMT が既定です。
時刻が GMT 以外のタイム ゾーンで指定されている場合、"YYYYMMDDHHMMSS.0[+/-]HHMM" の形式の "Z" ではなく、タイム ゾーンと GMT の差分が文字列に追加されます。 許容される値の例として、"20010928060000.0+0200" があります。
差分は、"GMT = 現地時間 + 差分" という数式に基づいています。
Boolean
Syntax Type: ADSTYPE_BOOLEAN
Active Directory は、この構文に対して符号付き 32 ビット値のみを受け入れます。 0 は FALSE として、0 以外のすべての値を TRUE として処理します。
整数型
Syntax Type: ADSTYPE_INTEGER
32 ビット符号付き数値。
大きな整数
Syntax Type: ADSTYPE_LARGE_INTEGER
64 ビット符号付き数値。 大きな整数は、実際には IADsLargeInteger インターフェイスの COM オブジェクトとして実装されます。 HighPart メソッドと LowPart メソッドは、大きな整数値の 2 つの 32 ビットの半分にアクセスするために使用されます。
例:
Dim x as IADsLargeInteger
Set o = GetObject("LDAP://DC=Fabrikam,DC=com")
Set x = o.Get("UsnCreated")
Debug.Print x.HighPart
Debug.Print x.LowPart
オクテット文字列
Syntax Type: ADSTYPE_OCTET_STRING
オクテット文字列は、バイトのバリアント配列として返されます。 これは、サイズ数 (オクテットの数) とそれに続く一連のオクテットで構成されます。 オクテットは 8 ビットバイトであるため、一連のオクテットはバイナリ データの文字列です。
オブジェクト クラス
Syntax Type: ADSTYPE_CASE_IGNORE_STRING
オブジェクト クラスは、特定のスキーマ クラスの一意のオブジェクト識別子です。 各オブジェクト インスタンスのクラスは、objectClass 属性によって識別されます。 作成時にオブジェクト クラスを変更することはできません。 objectClass は複数の値を持つ属性です。 オブジェクトの特定のクラスと、特定のクラスが派生したすべての構造クラスまたは抽象クラスのクラスが一覧表示されます。 これには、他のすべてのクラスが最終的に派生するクラスである Top が含まれます。 Active Directory では、objectClass 属性に補助クラスは一覧表示されません。
セキュリティ記述子
Syntax Type: ADSTYPE_NT_SECURITY_DESCRIPTOR
アクセス権は、Active Directory オブジェクトに対して操作を実行しようとしたときにセキュリティ プリンシパルが持つ機能を定義します。 セキュリティ記述子は、オブジェクトに関連付けられているアクセス制御情報を記述します。
セキュリティ記述子は、ディレクトリ オブジェクトのプロパティとしてnTSecurityDescriptor プロパティに格納されます。 認証されたユーザーがディレクトリ オブジェクトにアクセスしようとすると、ディレクトリ サーバーは、オブジェクト セキュリティ記述子に基づいて、ユーザーに対して許可または拒否されたアクセスを決定します。
ADS_SD_CONTROL_ENUM リストでは、セキュリティ記述子のコントロール フラグを指定します。
次のコード例は、セキュリティ記述子を取得する方法を示しています。
' Obtain a security descriptor.
Dim x as IADs
Dim sd as IADsSecurityDescriptor
Dim acl as IADsAccessControlList
Set x = GetObject("LDAP://DC=Fabrikam, DC=com")
Set sd = x.Get("nTSecurityDescriptor")
Debug.Print sd.Control
Debug.Print sd.Group
Debug.Print sd.Owner
Debug.Print sd.Revision
Set acl = sd.DiscretionaryAcl
Set sacl = sd.SystemAcl
関連トピック