Megosztás a következőn keresztül:


Kernelobjektumok

A kernelobjektum-leírók folyamatspecifikusak. Vagyis egy folyamatnak létre kell hoznia az objektumot, vagy meg kell nyitnia egy meglévő objektumot egy kernelobjektum-leíró beszerzéséhez. A kernelfogópontok folyamatonkénti korlátja 2^24. A leírók azonban a lapozott készletben vannak tárolva, így a létrehozható leírók tényleges száma a rendelkezésre álló memórián alapul. A 32 bites Windows rendszeren létrehozható leírók száma jelentősen alacsonyabb, mint 2^24.

Bármely folyamat létrehozhat egy új leírót egy meglévő kernelobjektumhoz (még egy másik folyamat által létrehozotthoz is), feltéve, hogy a folyamat ismeri az objektum nevét, és biztonsági hozzáféréssel rendelkezik az objektumhoz. A kernelobjektum-leírók olyan hozzáférési jogosultságokat tartalmaznak, amelyek jelzik a folyamat számára megadható vagy elutasítható műveleteket. Egy alkalmazás hozzáférési jogosultságokat ad meg, amikor létrehoz egy objektumot, vagy beszerez egy meglévő objektumleírót. A kernelobjektumok minden típusa támogatja a saját hozzáférési jogosultságait. Az eseménykezelők például beállíthatják vagy várakoztathatják a hozzáférést (vagy mindkettőt), a fájlleírók olvasási és írási hozzáféréssel (vagy mindkettőkkel) és így tovább. További információ: Biztonságos objektumok.

Az alábbi ábrán egy alkalmazás létrehoz egy eseményobjektumot. A CreateEvent függvény létrehozza az eseményobjektumot, és visszaad egy objektumfogópontot.

alkalmazás eseményobjektumot hoz létre

Az eseményobjektum létrehozása után az alkalmazás az eseménykezelő használatával beállíthatja vagy várakozhatja az eseményt. A leíró mindaddig érvényes marad, amíg az alkalmazás bezárja vagy leállítja a leírót.

A legtöbb kernelobjektum több fogópontot támogat egyetlen objektumon. Az előző ábrán szereplő alkalmazás például további eseményobjektum-leírókat szerezhet be az OpenEvent függvénnyel, ahogyan az az alábbi ábrán látható.

alkalmazás több fogóponttal rendelkező eseményobjektumot hoz létre

Ez a módszer lehetővé teszi, hogy az alkalmazások különböző hozzáférési jogosultságokkal rendelkezzenek. Előfordulhat például, hogy az 1. leíró beállította és várakozta az eseményhez való hozzáférést, a 2. leíró pedig csak várakozási hozzáféréssel rendelkezik.

Ha egy másik folyamat ismeri az esemény nevét, és biztonsági hozzáféréssel rendelkezik az objektumhoz, saját eseményobjektum-kezelőt hozhat létre OpenEventhasználatával. A létrehozási alkalmazás a DuplicateHandle függvénnyel is duplikálhatja az egyik fogópontját ugyanabba a folyamatba vagy egy másik folyamatba.

Az objektumok mindaddig a memóriában maradnak, amíg legalább egy objektumfogópont létezik. Az alábbi ábrán az alkalmazások a CloseHandle függvénnyel zárják be az eseményobjektum-leírókat. Ha nincsenek eseménykezelők, a rendszer eltávolítja az objektumot a memóriából az alábbi ábrán látható módon.

alkalmazászáró eseményobjektum leírói eltávolítják az objektumot a memóriából

A rendszer a többi kernelobjektumtól némileg eltérően kezeli a fájlobjektumokat. A fájlobjektumok tartalmazzák a fájlmutatót – a következő bájtra mutató mutatót, amelyet egy fájlban kell olvasni vagy írni. Amikor egy alkalmazás új fájlkezelőt hoz létre, a rendszer létrehoz egy új fájlobjektumot. Ezért egynél több fájlobjektum hivatkozhat egyetlen lemezen lévő fájlra, ahogyan az a következő ábrán is látható.

lemezen lévő fájlra hivatkozó több fájlobjektumot

Csak duplikáció vagy öröklés révén több fájlkezelő is hivatkozhat ugyanarra a fájlobjektumra, ahogyan az az alábbi ábrán is látható.

két fájlfogópont ugyanarra a fájlobjektumra hivatkozik,

Az alábbi táblázat felsorolja az egyes kernelobjektumokat, valamint az egyes objektumok létrehozói és romboló funkcióit. A létrehozó függvények vagy létrehozzák az objektumot és egy objektumfogópontot, vagy létrehoznak egy új meglévő objektumfogópontot. A romboló függvények bezárják az objektumfogópontot. Amikor egy alkalmazás bezárja az utolsó fogópontot egy kernelobjektumhoz, a rendszer eltávolítja az objektumot a memóriából.

Kernel-objektum Alkotói függvény Romboló függvény
Hozzáférési jogkivonat CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, OpenThreadToken CloseHandle
Változásértesítés FindFirstChangeNotification FindCloseChangeNotification
Kommunikációs eszköz CreateFile CloseHandle
Konzolbemenet CreateFile, a CONIN$ használatával CloseHandle
Konzol képernyőpuffere CreateFileés CONOUT$ CloseHandle
Asztal GetThreadDesktop Az alkalmazások nem tudják törölni ezt az objektumot.
Esemény CreateEvent, CreateEventEx, OpenEvent CloseHandle
Eseménynapló OpenEventLog, RegisterEventSource, OpenBackupEventLog CloseEventLog
Fájl CreateFile CloseHandle, DeleteFile
Fájlleképezés CreateFileMapping, OpenFileMapping CloseHandle
Fájl keresése FindFirstFile FindClose
Halom HeapCreate HeapDestroy
I/O befejezési port CreateIoCompletionPort CloseHandle
Foglalkozás CreateJobObject CloseHandle
Mailslot CreateMailslot CloseHandle
Memóriaerőforrás-értesítés CreateMemoryResourceNotification CloseHandle
Modul LoadLibrary, GetModuleHandle FreeLibrary
Mutex CreateMutex, CreateMutexEx, OpenMutex CloseHandle
Cső CreateNamedPipe, CreatePipe CloseHandle, DisconnectNamedPipe
Folyamat CreateProcess, OpenProcess, GetCurrentProcess CloseHandle, TerminateProcess
Szemafor CreateSemaphore, CreateSemaphoreEx, OpenSemaphore CloseHandle
Konnektor szoftvercsatorna-, fogadja el closesocket
Fonál CreateThread, CreateRemoteThread, GetCurrentThread CloseHandle, TerminateThread
Időzítő CreateWaitableTimer, CreateWaitableTimerEx, OpenWaitableTimer CloseHandle
Erőforrás frissítése BeginUpdateResource EndUpdateResource
Ablakállomás GetProcessWindowStation Az alkalmazások nem tudják törölni ezt az objektumot.

 

kernelobjektum-névterek