ADSI 属性语法

目录中的每个属性都有关联的语法。 例如,整数、字符串、数字等。 ADSI 定义映射到本机目录语法的自己的语法。 本部分介绍 ADSI 中的属性语法类型。

可分辨名称字符串

Syntax Type: ADSTYPE_DN_STRING

可分辨名称可用于将两个对象链接在一起。 例如,它可以创建一个链接,使 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.

Case Exact String 是区分大小写的字符串,而 Case Ignore String 是不区分大小写的字符串。 目录中大量属性使用此语法。

注意

该目录可能或不能将其存储为 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) YYMMDD;(2) HHMM 或 HHMMSS (两者都是可接受的):和 (3) “Z” 表示给定的时间是格林威治标准时间 (GMT), 或 “+/-HHMM” ,以指示给定的时间是当地时间与格林尼治标准时间的给定差异。 差异基于公式:GMT=Local+differential。

注意

年份的前两位数字不存储在此字符串中。

 

法律值的一些示例包括“9101311455Z”、“910131145503Z”、“9101314455-0500”、“910131145503+0130”。 此字符串存储为单字节 ASCII 字符,并且不存储任何代码页码。

尽管支持排序,但它仅作为 ASCII 不区分大小写的字符串排序进行,而不是通过正确解释字符串的含义来完成。

接受任何有效的字符串值。 不尝试确保字符串包含有效的时间字符串。

通用时间

Syntax Type: ADSTYPE_UTC_TIME

如果要定义用于存储时间值的新属性,则应使用 GeneralizedTime 语法。 GeneralizedTime 语法使用四个字符来表示年份,而不是将两个字符表示为 UTCTime。

GeneralizedTime 语法的格式为“YYYYMMDDHHMMSS.0Z”。 可接受的值为“20010928060000.0Z”。 “Z”表示没有时间差异。 Active Directory 将日期/时间存储为格林威治平均时间(GMT)。 如果未指定时间差异,则 GMT 为默认值。

如果在 GMT 以外的时区中指定时间,时区和 GMT 之间的差异将追加到字符串而不是“Z”,格式为“YYYYMMDDHMMSS.0[+/-]HHMM”。 可接受的值为“20010928060000.0+0200”。

差异基于公式:GMT=Local+differential。

布尔

Syntax Type: ADSTYPE_BOOLEAN

Active Directory 仅接受此语法的有符号 32 位值。 它将零作为 FAL 处理标准版所有非零值作为 TRUE 处理。

Integer

Syntax Type: ADSTYPE_INTEGER

32 位有符号数值。

大整数

Syntax Type: ADSTYPE_LARGE_INTEGER

64 位有符号数值。 大型整数实际上是在 IADsLargeInteger 接口上实现为 COM 对象。 HighPart 和 LowPart 方法用于访问大整数值的两个 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

Active Directory 属性的语法

选择语法

如何指定比较值