Kernel-objekt
Kernelobjekthandtag är processspecifika. En process måste antingen skapa objektet eller öppna ett befintligt objekt för att hämta ett kernelobjekthandtag. Gränsen per process för kernelreferenser är 2^24. Referenserna lagras dock i den växlingsbara poolen, så det faktiska antalet handtag som du kan skapa baseras på tillgängligt minne. Antalet referenser som du kan skapa i 32-bitars Windows är betydligt lägre än 2^24.
Alla processer kan skapa ett nytt handtag till ett befintligt kernelobjekt (även ett som skapats av en annan process), förutsatt att processen känner till objektets namn och har säkerhetsåtkomst till objektet. Kernel-objektreferenser innehåller åtkomsträttigheter som anger vilka åtgärder som kan beviljas eller nekas till en process. Ett program anger åtkomsträttigheter när det skapar ett objekt eller hämtar ett befintligt objekthandtag. Varje typ av kernelobjekt har stöd för sin egen uppsättning åtkomsträttigheter. Händelsehandtag kan till exempel ha åtkomst till set eller wait (eller båda), filhandtag kan ha läs- eller skrivåtkomst (eller båda) och så vidare. Mer information finns i Skyddsbara objekt.
I följande bild skapar ett program ett händelseobjekt. Funktionen CreateEvent skapar händelseobjektet och returnerar ett objekthandtag.
När händelseobjektet har skapats kan programmet använda händelsehandtaget för att ställa in eller vänta på händelsen. Handtaget förblir giltigt tills programmet stänger handtaget eller avslutas.
De flesta kernelobjekt har stöd för flera referenser till ett enda objekt. Programmet i föregående bild kan till exempel hämta ytterligare händelseobjektreferenser med hjälp av funktionen OpenEvent, enligt följande bild.
Med den här metoden kan ett program ha referenser med olika åtkomsträttigheter. Till exempel kan handtag 1 ha angett och vänta åtkomst till händelsen, och Handtag 2 kanske bara har vänteåtkomst.
Om en annan process känner till händelsenamnet och har säkerhetsåtkomst till objektet kan den skapa ett eget händelseobjekthandtag med hjälp av OpenEvent-. Det skapande programmet kan också duplicera en av dess referenser i samma process eller till en annan process med hjälp av funktionen DuplicateHandle.
Ett objekt finns kvar i minnet så länge det finns minst ett objekthandtag. I följande bild använder programmen funktionen CloseHandle för att stänga sina händelseobjektreferenser. När det inte finns några händelsereferenser tar systemet bort objektet från minnet, enligt följande bild.
Systemet hanterar filobjekt något annorlunda än andra kernelobjekt. Filobjekt innehåller filpekaren – pekaren till nästa byte som ska läsas eller skrivas i en fil. När ett program skapar ett nytt filhandtag skapar systemet ett nytt filobjekt. Därför kan fler än ett filobjekt referera till en enda fil på disken, som du ser i nästa bild.
Endast genom duplicering eller arv kan fler än en filreferens referera till samma filobjekt, som visas i följande bild.
I följande tabell visas var och en av kernelobjekten, tillsammans med varje objekts funktioner för skapare och jagare. Skaparfunktionerna skapar antingen objektet och ett objekthandtag eller skapar ett nytt befintligt objekthandtag. Jagarfunktionerna stänger objekthandtaget. När ett program stänger det sista handtaget till ett kernelobjekt tar systemet bort objektet från minnet.
Relaterade ämnen