Dela via


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.

program som skapar ett händelseobjekt

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.

program som skapar ett händelseobjekt med flera referenser

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.

händelseobjektreferenser för programstängning för att ta bort objekt från minnet

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.

flera filobjekt som refererar till en fil på disk

Endast genom duplicering eller arv kan fler än en filreferens referera till samma filobjekt, som visas i följande bild.

två filreferenser refererar till samma filobjekt

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.

Kernel-objekt Creator-funktion Destroyer-funktion
Åtkomsttoken CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, OpenThreadToken CloseHandle
Ändra meddelande FindFirstChangeNotification FindCloseChangeNotification
Kommunikationsenhet CreateFile CloseHandle
Konsolindata CreateFile, med CONIN$ CloseHandle
Konsolskärmsbuffert CreateFile, med CONOUT$ CloseHandle
Skrivbord GetThreadDesktop Program kan inte ta bort det här objektet.
Händelse CreateEvent, CreateEventEx, OpenEvent CloseHandle
Händelselogg OpenEventLog, RegisterEventSource, OpenBackupEventLog CloseEventLog
Fil CreateFile CloseHandleDeleteFile
Filmappning CreateFileMapping, OpenFileMapping CloseHandle
Sök efter fil FindFirstFile FindClose
Hög HeapSkapa HeapDestroy
I/O-slutförandeport CreateIoCompletionPort CloseHandle
Jobb CreateJobObject CloseHandle
Mailslot CreateMailslot CloseHandle
Meddelande om minnesresurs CreateMemoryResourceNotification CloseHandle
Modul LoadLibrary, GetModuleHandle FreeLibrary
Mutex CreateMutex, CreateMutexEx, OpenMutex CloseHandle
Pipa CreateNamedPipeCreatePipe CloseHandle, DisconnectNamedPipe
Process CreateProcess, OpenProcess, GetCurrentProcess CloseHandle, TerminateProcess
Semafor CreateSemaphore, CreateSemaphoreEx, OpenSemaphore CloseHandle
Uttag socketaccepterar closesocket
Tråd CreateThread, CreateRemoteThread, GetCurrentThread CloseHandle, TerminateThread
Timer CreateWaitableTimer, CreateWaitableTimerEx, OpenWaitableTimer CloseHandle
Uppdatera resurs BeginUpdateResource EndUpdateResource
Fönsterstation GetProcessWindowStation Program kan inte ta bort det här objektet.

 

kernelobjektnamnområden