Delen via


Kernelobjecten

Kernelobjectingangen zijn processpecifiek. Dat wil gezegd: een proces moet het object maken of een bestaand object openen om een kernelobjectingang te verkrijgen. De limiet per proces voor kernel-ingangen is 2^24. Handles worden echter opgeslagen in de gepaginade pool, dus het werkelijke aantal ingangen dat u kunt maken, is gebaseerd op het beschikbare geheugen. Het aantal ingangen dat u op 32-bits Windows kunt maken, is aanzienlijk lager dan 2^24.

Elk proces kan een nieuwe ingang maken voor een bestaand kernelobject (zelfs een proces dat door een ander proces is gemaakt), mits het proces de naam van het object kent en beveiligingstoegang tot het object heeft. Kernelobjectingangen bevatten toegangsrechten die aangeven welke acties aan een proces kunnen worden verleend of geweigerd. Een toepassing geeft toegangsrechten op wanneer een object wordt gemaakt of een bestaande objecthandgreep verkrijgt. Elk type kernelobject ondersteunt een eigen set toegangsrechten. Gebeurtenisingangen kunnen bijvoorbeeld instellen of wachten op toegang (of beide), bestandsingangen kunnen lees- of schrijftoegang hebben (of beide), enzovoort. Zie Beveiligbare objectenvoor meer informatie.

In de volgende afbeelding maakt een toepassing een gebeurtenisobject. Met de functie CreateEvent wordt het gebeurtenisobject gemaakt en wordt een objectgreep geretourneerd.

toepassing die een gebeurtenisobject maakt

Nadat het gebeurtenisobject is gemaakt, kan de toepassing de gebeurtenisgreep gebruiken om de gebeurtenis in te stellen of te wachten op de gebeurtenis. De ingang blijft geldig totdat de toepassing de ingang sluit of beëindigt.

De meeste kernelobjecten ondersteunen meerdere ingangen tot één object. De toepassing in de vorige afbeelding kan bijvoorbeeld extra gebeurtenisobjectingangen verkrijgen met behulp van de functie OpenEvent, zoals wordt weergegeven in de volgende afbeelding.

toepassing die een gebeurtenisobject maakt met meerdere ingangen

Met deze methode kan een toepassing ingangen met verschillende toegangsrechten hebben. Handle 1 heeft bijvoorbeeld mogelijk de toegang tot de gebeurtenis ingesteld en gewacht, en 2 heeft mogelijk alleen wachttoegang.

Als een ander proces de naam van de gebeurtenis kent en beveiligingstoegang heeft tot het object, kan het een eigen gebeurtenisobjecthandgreep maken met behulp van OpenEvent-. De makende toepassing kan ook een van de ingangen dupliceren in hetzelfde proces of in een ander proces met behulp van de functie DuplicateHandle.

Een object blijft in het geheugen zolang er ten minste één objectgreep bestaat. In de volgende afbeelding gebruiken de toepassingen de functie CloseHandle om de gebeurtenisobjectingangen te sluiten. Wanneer er geen gebeurtenisingangen zijn, wordt het object uit het geheugen verwijderd, zoals wordt weergegeven in de volgende afbeelding.

gebeurtenisobjectgrepen voor het sluiten van toepassingen om het object uit het geheugen te verwijderen

Het systeem beheert bestandsobjecten enigszins anders dan andere kernelobjecten. Bestandsobjecten bevatten de bestandspointer: de aanwijzer naar de volgende byte die moet worden gelezen of geschreven in een bestand. Wanneer een toepassing een nieuwe bestandsingang maakt, maakt het systeem een nieuw bestandsobject. Daarom kunnen meerdere bestandsobjecten verwijzen naar één bestand op schijf, zoals wordt weergegeven in de volgende afbeelding.

meerdere bestandsobjecten die verwijzen naar een bestand op schijf

Alleen door duplicatie of overname kan meer dan één bestandsgreep verwijzen naar hetzelfde bestandsobject, zoals wordt weergegeven in de volgende afbeelding.

twee bestandsingangen verwijzen naar hetzelfde bestandsobject

De volgende tabel bevat elk van de kernelobjecten, samen met de maker- en vernietigingsfuncties van elk object. De makerfuncties maken het object en een objectgreep of maken een nieuwe bestaande objectgreep. De vernietigerfuncties sluiten de objectgreep. Wanneer een toepassing de laatste ingang naar een kernelobject sluit, verwijdert het systeem het object uit het geheugen.

Kernelobject De functie Maker Destroyer, functie
Toegangstoken CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, OpenThreadToken CloseHandle-
Melding wijzigen FindFirstChangeNotification- FindCloseChangeNotification-
Communicatieapparaat CreateFile- CloseHandle-
Console-invoer CreateFilemet CONIN$ CloseHandle-
Consoleschermbuffer CreateFile, met CONOUT$ CloseHandle-
Bureaublad GetThreadDesktop- Toepassingen kunnen dit object niet verwijderen.
Gebeurtenis CreateEvent, CreateEventEx, OpenEvent CloseHandle-
Gebeurtenislogboek OpenEventLog, RegisterEventSource, OpenBackupEventLog CloseEventLog-
Bestand CreateFile- CloseHandleDeleteFile
Bestandstoewijzing CreateFileMapping- CloseHandle-
Bestand zoeken FindFirstFile- FindClose-
Hoop HeapCreate- HeapDestroy-
I/O-voltooiingspoort CreateIoCompletionPort CloseHandle-
Baan CreateJobObject- CloseHandle-
Mailslot CreateMailslot CloseHandle-
Melding van geheugenresource CreateMemoryResourceNotification CloseHandle-
Module LoadLibrary-, GetModuleHandle- FreeLibrary-
Mutex CreateMutex, CreateMutexEx, OpenMutex- CloseHandle-
Pijp CreateNamedPipe, CreatePipe- CloseHandle-, DisconnectNamedPipe-
Proces CreateProcess, OpenProcess, GetCurrentProcess CloseHandle, TerminateProcess
Semafoor CreateSemaphore, CreateSemaphoreEx, OpenSemaphore CloseHandle-
Stopcontact socketaccepteren closesocket
Draad CreateThread, CreateRemoteThread, GetCurrentThread CloseHandle, TerminateThread
Timer CreateWaitableTimer, CreateWaitableTimerEx, OpenWaitableTimer- CloseHandle-
Resource bijwerken BeginUpdateResource- EndUpdateResource-
Vensterstation GetProcessWindowStation Toepassingen kunnen dit object niet verwijderen.

 

kernelobjectnaamruimten