文件和注册表项的安全描述符

Active Directory 服务接口(ADSI)可用于管理和保护组织内的文件系统,包括设置或修改用户创建的文件或文件共享的 ACL。 安全接口,如 IADsSecurityDescriptorIADsAccessControlListIADsAccessControlEntry,可在 Active Directory、Exchange、文件、文件共享或注册表键对象上设置 ACL。 在使用这些接口之前,如果安全描述符使用的格式与接口不同,或者因为不是安全管理员组的成员而没有安全描述符 SACL 的访问权限,则可能需要修改安全描述符。

要获取、设置或修改安全描述符,请使用 IADsSecurityUtility 接口。 通过此接口,可以从各种资源中检索原始格式的安全描述符,如 ADSI 格式 IADsSecurityDescriptor、原始安全描述符或 Exchange 5.5 中使用的十六进制字符串。 在检索时,可以将其转换为另一种格式,例如,从原始安全描述符转换为 IADsSecurityDescriptor。 然后,可以将新格式写回到资源。

不同对象类型的某些 IADsAccessControlEntry 属性值(如 AccessMaskAceFlags)将有所不同。 例如,Active Directory 对象将使用 ADS_RIGHTS_ENUM 枚举中的 ADS_RIGHT_GENERIC_READ 成员作为 IADsAccessControlEntry.AccessMask 属性,但文件对象的相应访问权限是 FILE_GENERIC_READ。 假设 Active Directory 对象和非 Active Directory 对象的所有属性值都相同是不安全的。 以下列表显示了非 Active Directory 对象的 IADsAccessControlEntry 不同属性,以及可以获取适当值的位置。

AccessMask

有关详细信息和文件或文件共享对象的可能值列表,请参阅文件安全性和访问权限

有关注册表对象的详细信息和可能值列表,请参阅注册表项安全性和访问权限

AceType

有关详细信息,请参见 ACE_HEADER 结构的 AceType 成员。

AceFlags

有关详细信息,请参阅 ACE_HEADER 结构的 AceFlags 成员。

标记

包含 WinNT.h 中的零值或以下一个或多个值的组合。

ACE_OBJECT_TYPE_PRESENT (1)

ObjectType 包含一个有效值。

ACE_INHERITED_OBJECT_TYPE_PRESENT (2)

InheritedObjectType 包含一个有效值。

ObjectType

有关详细信息,请参阅 ACCESS_DENIED_OBJECT_ACEACCESS_ALLOWED_OBJECT_ACE 和类似结构的 ObjectType 成员。 不应为非 Active Directory 对象设置或修改此属性。

InheritedObjectType

有关详细信息,请参阅 ACCESS_DENIED_OBJECT_ACEACCESS_ALLOWED_OBJECT_ACE 和类似结构的 InheritedObjectType 成员。 不应为非 Active Directory 对象设置或修改此属性。

通常,IADsSecurityUtility.GetSecurityDescriptor 将检索安全描述符的所有部分,例如所有者、组、SACL 或 DACL。 同样,IADsSecurityUtility.SetSecurityDescriptor 将默认覆盖安全描述符的所有部分。 你可以使用 IADsSecurityUtility.SecurityMask 属性来指定要检索或设置的安全描述符的各个部分。 例如,你可以在调用 GetSecurityDescriptor 之前将 SecurityMask 设置为 ADS_SECURITY_INFO_DACL,以便只检索 DACL 而不检索安全描述符的其他部分。

有关详细信息以及使用 IADsSecurityUtility 接口将 ACE 添加到文件的代码示例,请参阅将 ACE 添加到文件的示例代码

以下示例代码为文件、文件共享和注册表对象提供了 AccessMaskAceTypeAceFlagsFlags 属性的常量标识符,以供 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