Udostępnij za pośrednictwem


Obiekty jądra

Dojścia obiektów jądra są specyficzne dla procesu. Oznacza to, że proces musi utworzyć obiekt lub otworzyć istniejący obiekt, aby uzyskać uchwyt obiektu jądra. Limit liczby dojść jądra na proces wynosi 2^24. Jednak uchwyty są przechowywane w puli stronicowanej, więc rzeczywista liczba dojść, które można utworzyć, jest oparta na dostępnej pamięci. Liczba dojść, które można utworzyć w 32-bitowym systemie Windows, jest znacznie niższa niż 2^24.

Każdy proces może utworzyć nowy uchwyt do istniejącego obiektu jądra (nawet jeden utworzony przez inny proces), pod warunkiem, że proces zna nazwę obiektu i ma dostęp zabezpieczeń do obiektu. Dojścia obiektu jądra obejmują prawa dostępu, które wskazują akcje, które mogą zostać przyznane lub odrzucone dla procesu. Aplikacja określa prawa dostępu podczas tworzenia obiektu lub uzyskiwania istniejącego uchwytu obiektu. Każdy typ obiektu jądra obsługuje własny zestaw praw dostępu. Na przykład dojścia zdarzeń mogą mieć ustawiony lub oczekujący dostęp (lub oba), dojścia plików mogą mieć dostęp do odczytu lub zapisu (lub obu) itd. Aby uzyskać więcej informacji, zobacz Zabezpieczane obiekty.

Na poniższej ilustracji aplikacja tworzy obiekt zdarzenia. Funkcja CreateEvent tworzy obiekt zdarzenia i zwraca uchwyt obiektu.

aplikacji tworzącej obiekt zdarzenia

Po utworzeniu obiektu zdarzenia aplikacja może użyć dojścia zdarzeń, aby ustawić lub poczekać na zdarzenie. Dojście pozostaje prawidłowe, dopóki aplikacja nie zamknie dojścia lub zakończy działanie.

Większość obiektów jądra obsługuje wiele dojść do pojedynczego obiektu. Na przykład aplikacja na poprzedniej ilustracji może uzyskać dodatkowe dojścia obiektów zdarzeń przy użyciu funkcji OpenEvent, jak pokazano na poniższej ilustracji.

aplikacji tworzącej obiekt zdarzenia z wieloma dojściami

Ta metoda umożliwia aplikacji obsługę z różnymi prawami dostępu. Na przykład dojście 1 może mieć ustawiony i oczekujące dostęp do zdarzenia, a dojście 2 może mieć tylko dostęp oczekiwania.

Jeśli inny proces zna nazwę zdarzenia i ma dostęp zabezpieczeń do obiektu, może utworzyć własny dojście obiektu zdarzeń przy użyciu OpenEvent. Aplikacja tworząca może również zduplikować jeden z jego dojść do tego samego procesu lub do innego procesu przy użyciu funkcji DuplicateHandle.

Obiekt pozostaje w pamięci, o ile istnieje co najmniej jeden uchwyt obiektu. Na poniższej ilustracji aplikacje używają funkcji CloseHandle, aby zamknąć uchwyty obiektów zdarzeń. Jeśli nie ma dojść do zdarzeń, system usuwa obiekt z pamięci, jak pokazano na poniższej ilustracji.

dojścia obiektu zdarzenia zamykania aplikacji w celu usunięcia obiektu z pamięci

System zarządza obiektami plików nieco inaczej niż inne obiekty jądra. Obiekty plików zawierają wskaźnik pliku — wskaźnik do następnego bajtu do odczytu lub zapisu w pliku. Za każdym razem, gdy aplikacja tworzy nowy dojście do plików, system tworzy nowy obiekt pliku. W związku z tym więcej niż jeden obiekt pliku może odwoływać się do pojedynczego pliku na dysku, jak pokazano na następnej ilustracji.

wielu obiektów plików odwołujące się do pliku na dysku

Tylko przez duplikowanie lub dziedziczenie może więcej niż jeden uchwyt pliku odnosić się do tego samego obiektu pliku, jak pokazano na poniższej ilustracji.

dwa dojścia plików odnoszą się do tego samego obiektu pliku

W poniższej tabeli wymieniono poszczególne obiekty jądra wraz z funkcjami twórcy i niszczyciela każdego obiektu. Twórca tworzy obiekt i uchwyt obiektu lub tworzy nowy istniejący uchwyt obiektu. Funkcje niszczyciela zamykają uchwyt obiektu. Gdy aplikacja zamyka ostatni dojście do obiektu jądra, system usuwa obiekt z pamięci.

Obiekt jądra Creator, funkcja Destroyer, funkcja
Token dostępu createRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, OpenThreadToken CloseHandle
Powiadomienie o zmianie FindFirstChangeNotification FindCloseChangeNotification
Urządzenie komunikacyjne createFile CloseHandle
Dane wejściowe konsoli createFile, z conIN$ CloseHandle
Bufor ekranu konsoli CreateFile z funkcją CONOUT$ CloseHandle
Pulpit GetThreadDesktop Aplikacje nie mogą usunąć tego obiektu.
Zdarzenie CreateEvent, CreateEventEx, openEvent CloseHandle
Dziennik zdarzeń OpenEventLog, RegisterEventSource, OpenBackupEventLog CloseEventLog
Plik createFile CloseHandle, DeleteFile
Mapowanie plików CreateFileMapping OpenFileMapping CloseHandle
Znajdź plik FindFirstFile FindClose
Kupa stertaTworzenie heapDestroy
Port uzupełniania we/wy CreateIoCompletionPort CloseHandle
Zadanie CreateJobObject CloseHandle
Mailslot createMailslot CloseHandle
Powiadomienie o zasobie pamięci CreateMemoryResourceNotification CloseHandle
Moduł LoadLibrary, GetModuleHandle FreeLibrary
Mutex CreateMutex, CreateMutexEx, OpenMutex CloseHandle
Fajka CreateNamedPipeCreatePipe CloseHandle, DisconnectNamedPipe
Proces CreateProcess, OpenProcess, GetCurrentProcess CloseHandle, TerminateProcess
Semafor CreateSemaphore, CreateSemaphoreEx, OpenSemaphore CloseHandle
Gniazdo socket, akceptują closesocket
Nitka CreateThread, CreateRemoteThread, GetCurrentThread CloseHandle, TerminateThread
Minutnik createWaitableTimer, CreateWaitableTimerEx, OpenWaitableTimer CloseHandle
Aktualizowanie zasobu BeginUpdateResource EndUpdateResource
Stacja okienna GetProcessWindowStation Aplikacje nie mogą usunąć tego obiektu.

 

przestrzenie nazw obiektów jądra