文件和注册表项的安全描述符
Active Directory 服务接口(ADSI)可用于管理和保护组织内的文件系统,包括设置或修改用户创建的文件或文件共享的 ACL。 安全接口,如 IADsSecurityDescriptor、IADsAccessControlList 和 IADsAccessControlEntry,可在 Active Directory、Exchange、文件、文件共享或注册表键对象上设置 ACL。 在使用这些接口之前,如果安全描述符使用的格式与接口不同,或者因为不是安全管理员组的成员而没有安全描述符 SACL 的访问权限,则可能需要修改安全描述符。
要获取、设置或修改安全描述符,请使用 IADsSecurityUtility 接口。 通过此接口,可以从各种资源中检索原始格式的安全描述符,如 ADSI 格式 IADsSecurityDescriptor、原始安全描述符或 Exchange 5.5 中使用的十六进制字符串。 在检索时,可以将其转换为另一种格式,例如,从原始安全描述符转换为 IADsSecurityDescriptor。 然后,可以将新格式写回到资源。
不同对象类型的某些 IADsAccessControlEntry 属性值(如 AccessMask 和 AceFlags)将有所不同。 例如,Active Directory 对象将使用 ADS_RIGHTS_ENUM 枚举中的 ADS_RIGHT_GENERIC_READ 成员作为 IADsAccessControlEntry.AccessMask 属性,但文件对象的相应访问权限是 FILE_GENERIC_READ。 假设 Active Directory 对象和非 Active Directory 对象的所有属性值都相同是不安全的。 以下列表显示了非 Active Directory 对象的 IADsAccessControlEntry 不同属性,以及可以获取适当值的位置。
-
有关详细信息和文件或文件共享对象的可能值列表,请参阅文件安全性和访问权限。
有关注册表对象的详细信息和可能值列表,请参阅注册表项安全性和访问权限。
-
有关详细信息,请参见 ACE_HEADER 结构的 AceType 成员。
-
有关详细信息,请参阅 ACE_HEADER 结构的 AceFlags 成员。
-
包含 WinNT.h 中的零值或以下一个或多个值的组合。
-
ACE_OBJECT_TYPE_PRESENT (1)
-
ObjectType 包含一个有效值。
-
ACE_INHERITED_OBJECT_TYPE_PRESENT (2)
-
InheritedObjectType 包含一个有效值。
-
-
有关详细信息,请参阅 ACCESS_DENIED_OBJECT_ACE、ACCESS_ALLOWED_OBJECT_ACE 和类似结构的 ObjectType 成员。 不应为非 Active Directory 对象设置或修改此属性。
-
有关详细信息,请参阅 ACCESS_DENIED_OBJECT_ACE、ACCESS_ALLOWED_OBJECT_ACE 和类似结构的 InheritedObjectType 成员。 不应为非 Active Directory 对象设置或修改此属性。
通常,IADsSecurityUtility.GetSecurityDescriptor 将检索安全描述符的所有部分,例如所有者、组、SACL 或 DACL。 同样,IADsSecurityUtility.SetSecurityDescriptor 将默认覆盖安全描述符的所有部分。 你可以使用 IADsSecurityUtility.SecurityMask 属性来指定要检索或设置的安全描述符的各个部分。 例如,你可以在调用 GetSecurityDescriptor 之前将 SecurityMask 设置为 ADS_SECURITY_INFO_DACL,以便只检索 DACL 而不检索安全描述符的其他部分。
有关详细信息以及使用 IADsSecurityUtility 接口将 ACE 添加到文件的代码示例,请参阅将 ACE 添加到文件的示例代码。
以下示例代码为文件、文件共享和注册表对象提供了 AccessMask、AceType、AceFlags 和 Flags 属性的常量标识符,以供 Visual Basic 和 Microsoft Visual Basic Scripting Edition 使用。
' Identifiers for the IADsAccessControlEntry.AccessMask property for file,
' file share, and registry objects.
Const DELETE = &H10000
Const READ_CONTROL = &H20000
Const WRITE_DAC = &H40000
Const WRITE_OWNER = &H80000
Const SYNCHRONIZE = &H100000
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const STANDARD_RIGHTS_READ = &H20000
Const STANDARD_RIGHTS_WRITE = &H20000
Const STANDARD_RIGHTS_EXECUTE = &H20000
Const STANDARD_RIGHTS_ALL = &H1F0000
Const SPECIFIC_RIGHTS_ALL = &HFFFF
' Identifiers for the IADsAccessControlEntry.AccessMask property for file and
' file share objects.
Const FILE_READ_DATA = &H1 ' file & pipe
Const FILE_LIST_DIRECTORY = &H1 ' directory
Const FILE_WRITE_DATA = &H2 ' file & pipe
Const FILE_ADD_FILE = &H2 ' directory
Const FILE_APPEND_DATA = &H4 ' file
Const FILE_ADD_SUBDIRECTORY = &H4 ' directory
Const FILE_CREATE_PIPE_INSTANCE = &H4 ' named pipe
Const FILE_READ_EA = &H8 ' file & directory
Const FILE_WRITE_EA = &H10 ' file & directory
Const FILE_EXECUTE = &H20 ' file
Const FILE_TRAVERSE = &H20 ' directory
Const FILE_DELETE_CHILD = &H40 ' directory
Const FILE_READ_ATTRIBUTES = &H80 ' all
Const FILE_WRITE_ATTRIBUTES = &H100 ' all
Const FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H1FF
Const FILE_GENERIC_READ = STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or _
FILE_READ_EA Or SYNCHRONIZE
Const FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or _
FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE
Const FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE Or FILE_READ_ATTRIBUTES Or FILE_EXECUTE Or SYNCHRONIZE
' Identifiers for the IADsAccessControlEntry.AccessMask property for registry
' objects.
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const KEY_WOW64_32KEY = &H200
Const KEY_WOW64_64KEY = &H100
Const KEY_WOW64_RES = &H300
Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And _
(Not SYNCHRONIZE))
Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or _
KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
' Identifiers for the IADsAccessControlEntry.AceFlags property for file and
' file share objects.
Const OBJECT_INHERIT_ACE = &H1
Const CONTAINER_INHERIT_ACE = &H2
Const NO_PROPAGATE_INHERIT_ACE = &H4
Const INHERIT_ONLY_ACE = &H8
Const INHERITED_ACE = &H10
' Identifiers for the IADsAccessControlEntry.Flags property.
Const ACE_OBJECT_TYPE_PRESENT = 1
Const ACE_INHERITED_OBJECT_TYPE_PRESENT = 2