Udostępnij za pośrednictwem


Deskryptory zabezpieczeń w plikach i kluczach rejestru

Interfejsy usługi Active Directory (ADSI) mogą służyć do zarządzania i zabezpieczania systemów plików w organizacji, w tym do ustawiania lub modyfikowania list ACL w plikach lub udziałach plików utworzonych przez użytkowników. Interfejsy zabezpieczeń, takie jak IADsSecurityDescriptor, IADsAccessControlListi IADsAccessControlEntry ustawiać listy ACL w usłudze Active Directory, Exchange, plik, udział plików lub obiekty kluczy rejestru. Przed użyciem tych interfejsów deskryptor zabezpieczeń może być konieczne zmodyfikowanie, jeśli używa innego formatu niż interfejs, lub jeśli nie masz praw dostępu do SACL deskryptora zabezpieczeń, ponieważ nie jesteś członkiem grupy administratorów zabezpieczeń.

Aby uzyskać, ustawić lub zmodyfikować deskryptor zabezpieczeń, użyj interfejsu IADsSecurityUtility. Ten interfejs umożliwia pobranie deskryptora zabezpieczeń z różnych zasobów w oryginalnym formacie, takim jak format ADSI IADsSecurityDescriptor, pierwotny deskryptor zabezpieczeń lub jako ciąg szesnastkowy używany w programie Exchange 5.5. Po pobraniu można przekonwertować go na inny format, na przykład z pierwotnego deskryptora zabezpieczeń do IADsSecurityDescriptor. Następnie możesz zapisać nowy format z powrotem do zasobu.

Niektóre wartości właściwości IADsAccessControlEntry IADsAccessEntry, takie jak AccessMask i AceFlags, różnią się w przypadku różnych typów obiektów. Na przykład obiekt usługi Active Directory będzie używać elementu członkowskiego ADS_RIGHT_GENERIC_READ wyliczenia ADS_RIGHTS_ENUM dla IADsAccessControlEntry.AccessMask właściwości, ale równoważne prawo dostępu do obiektu pliku jest FILE_GENERIC_READ. Nie można bezpiecznie założyć, że wszystkie wartości właściwości będą takie same dla obiektów usługi Active Directory i obiektów innych niż Active Directory. Na poniższej liście przedstawiono właściwości IADsAccessControlEntry, które różnią się w przypadku obiektów innych niż Active Directory i gdzie można uzyskać odpowiednie wartości.

AccessMask

Aby uzyskać więcej informacji i listę możliwych wartości dla obiektów plików lub udziałów plików, zobacz Zabezpieczenia plików i prawa dostępu.

Aby uzyskać więcej informacji i listę możliwych wartości dla obiektów rejestru, zobacz Zabezpieczenia klucza rejestru i prawa dostępu.

AceType

Aby uzyskać więcej informacji, zobacz element członkowski AceType struktury ACE_HEADER.

AceFlags

Aby uzyskać więcej informacji, zobacz AceFlags składową struktury ACE_HEADER.

flagi

Zawiera zero lub kombinację co najmniej jednej z następujących wartości z winNT.h.

ACE_OBJECT_TYPE_PRESENT (1)

ObjectType zawiera prawidłową wartość.

ACE_INHERITED_OBJECT_TYPE_PRESENT (2)

InheritedObjectType zawiera prawidłową wartość.

ObjectType

Aby uzyskać więcej informacji, zobacz ObjectType składowej ACCESS_DENIED_OBJECT_ACE, ACCESS_ALLOWED_OBJECT_ACEi podobnych struktur. Ta właściwość nie powinna być ustawiana ani modyfikowana dla obiektów innych niż Active Directory.

InheritedObjectType

Aby uzyskać więcej informacji, zobacz InheritedObjectType składowej ACCESS_DENIED_OBJECT_ACE, ACCESS_ALLOWED_OBJECT_ACEi podobnych struktur. Ta właściwość nie powinna być ustawiana ani modyfikowana dla obiektów innych niż Active Directory.

Zwykle IADsSecurityUtility.GetSecurityDescriptor pobiera wszystkie części deskryptora zabezpieczeń, takie jak właściciel, grupa, SACL lub DACL. Podobnie IADsSecurityUtility.SetSecurityDescriptor zastąpi wszystkie części deskryptora zabezpieczeń domyślnie. Możesz użyć właściwości IADsSecurityUtility.SecurityMask, aby określić poszczególne części deskryptora zabezpieczeń do pobrania lub ustawienia. Można na przykład ustawić SecurityMask na ADS_SECURITY_INFO_DACL przed wywołaniem GetSecurityDescriptor, aby pobrać tylko listę DACL bez pobierania innych części deskryptora zabezpieczeń.

Aby uzyskać więcej informacji i przykład kodu, który używa interfejsu IADsSecurityUtility w celu dodania ACE do pliku, zobacz Przykładowy kod dodawania ACE do pliku.

Poniższy przykładowy kod zawiera identyfikatory stałe dla obiektów plików, udziałów plików i rejestru dla AccessMask, AceType, AceFlagsi Flags do użycia z visual basic i 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