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.
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.
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.
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.
Alleen door duplicatie of overname kan meer dan één bestandsgreep verwijzen naar hetzelfde bestandsobject, zoals wordt weergegeven in de volgende afbeelding.
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.
Verwante onderwerpen