Udostępnij przez


Synchronizacja zabezpieczeń obiektów i praw dostępu

Model zabezpieczeń systemu Windows umożliwia kontrolowanie dostępu do zdarzeń, mutex, semaphore i obiektów czasomierza oczekiwania. Kolejki czasomierza, zmienne połączone i obiekty sekcji krytycznej nie są zabezpieczane. Aby uzyskać więcej informacji, zobacz Access-Control Model.

Deskryptor zabezpieczeń można określić dla obiektu synchronizacji międzyprocesowej podczas wywoływania funkcji CreateEvent, CreateMutexCreateSemaphorelub CreateWaitableTimer. Jeśli określisz NULL, obiekt otrzyma domyślny deskryptor zabezpieczeń. Listy Access-Control (ACL) w domyślnym deskryptorze zabezpieczeń dla obiektu synchronizacji pochodzą z podstawowego lub personifikacji tokenu twórcy.

Aby uzyskać lub ustawić deskryptor zabezpieczeń zdarzenia, mutex, semaphore lub oczekujący obiekt czasomierza, wywołaj funkcje GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityInfolub SetSecurityInfo.

Dojścia zwrócone przez CreateEvent, CreateMutex, CreateSemaphorei CreateWaitableTimer mają pełny dostęp do nowego obiektu. Podczas wywoływania openEventOpenMutex, OpenSemaphorei funkcji OpenWaitableTimer system sprawdza żądane prawa dostępu względem deskryptora zabezpieczeń obiektu.

Prawidłowe prawa dostępu dla obiektów synchronizacji międzyprocesowych obejmują standardowych praw dostępu i niektórych praw dostępu specyficznych dla obiektu. W poniższej tabeli wymieniono standardowe prawa dostępu używane przez wszystkie obiekty.

Wartość Znaczenie
DELETE (0x00010000L) Wymagane do usunięcia obiektu.
READ_CONTROL (0x00020000L) Wymagane do odczytu informacji w deskryptorze zabezpieczeń dla obiektu, a nie w tym informacji w SACL. Aby odczytać lub zapisać SACL, musisz zażądać ACCESS_SYSTEM_SECURITY prawa dostępu. Aby uzyskać więcej informacji, zobacz SACL Access Right.
SYNC (0x00100000L) Prawo do używania obiektu do synchronizacji. Dzięki temu wątek może czekać, aż obiekt będzie w stanie sygnału.
WRITE_DAC (0x00040000L) Wymagane do zmodyfikowania listy DACL w deskryptorze zabezpieczeń dla obiektu.
WRITE_OWNER (0x000800000L) Wymagane do zmiany właściciela w deskryptorze zabezpieczeń dla obiektu.

 

W poniższej tabeli wymieniono prawa dostępu specyficzne dla obiektu dla obiektów zdarzeń. Te prawa są obsługiwane oprócz standardowych praw dostępu.

Wartość Znaczenie
EVENT_ALL_ACCESS (0x1F0003) Wszystkie możliwe prawa dostępu dla obiektu zdarzenia. Użyj tego prawa tylko wtedy, gdy aplikacja wymaga dostępu wykraczające poza te uprawnienia dostępu w warstwie Standardowa i EVENT_MODIFY_STATE. Korzystanie z tego prawa dostępu zwiększa możliwość uruchomienia aplikacji przez administratora.
EVENT_MODIFY_STATE (0x0002) Zmodyfikuj dostęp do stanu, który jest wymagany dla funkcji SetEvent, ResetEvent i PulseEvent.

 

W poniższej tabeli wymieniono prawa dostępu specyficzne dla obiektu dla obiektów mutex. Te prawa są obsługiwane oprócz standardowych praw dostępu.

Wartość Znaczenie
MUTEX_ALL_ACCESS (0x1F0001) Wszystkie możliwe prawa dostępu dla obiektu mutex. Użyj tego prawa tylko wtedy, gdy aplikacja wymaga dostępu wykraczające poza te uprawnienia dostępu w warstwie Standardowa. Korzystanie z tego prawa dostępu zwiększa możliwość uruchomienia aplikacji przez administratora.
MUTEX_MODIFY_STATE (0x0001) Zarezerwowane do użytku w przyszłości.

 

W poniższej tabeli wymieniono prawa dostępu specyficzne dla obiektu dla obiektów semafora. Te prawa są obsługiwane oprócz standardowych praw dostępu.

Wartość Znaczenie
SEMAPHORE_ALL_ACCESS (0x1F0003) Wszystkie możliwe prawa dostępu dla obiektu semafora. Użyj tego prawa tylko wtedy, gdy aplikacja wymaga dostępu wykraczające poza te uprawnienia dostępu w warstwie Standardowa i SEMAPHORE_MODIFY_STATE. Korzystanie z tego prawa dostępu zwiększa możliwość uruchomienia aplikacji przez administratora.
SEMAPHORE_MODIFY_STATE (0x0002) Zmodyfikuj dostęp do stanu, który jest wymagany dla funkcji ReleaseSemaphore.

 

W poniższej tabeli wymieniono prawa dostępu specyficzne dla obiektu dla obiektów czasomierza oczekiwania. Te prawa są obsługiwane oprócz standardowych praw dostępu.

Wartość Znaczenie
TIMER_ALL_ACCESS (0x1F0003) Wszystkie możliwe prawa dostępu dla obiektu czasomierza z możliwością oczekiwania. Użyj tego prawa tylko wtedy, gdy aplikacja wymaga dostępu wykraczające poza te prawa dostępu przyznane przez standardowe prawa dostępu i TIMER_MODIFY_STATE. Korzystanie z tego prawa dostępu zwiększa możliwość uruchomienia aplikacji przez administratora.
TIMER_MODIFY_STATE (0x0002) Zmodyfikuj dostęp do stanu, który jest wymagany dla funkcjiSetWaitableTimer iCancelWaitableTimer.
TIMER_QUERY_STATE (0x0001) Zarezerwowane do użytku w przyszłości.

 

Aby odczytać lub zapisać SACL obiektu synchronizacji międzyprocesowej, musisz zażądać ACCESS_SYSTEM_SECURITY prawa dostępu. Aby uzyskać więcej informacji, zobacz listAccess-Control list (ACL) i SACL Access Right.