Sdílet prostřednictvím


Objekty jádra

Popisovače objektů jádra jsou specifické pro procesy. To znamená, že proces musí buď vytvořit objekt, nebo otevřít existující objekt, aby získal popisovač objektu jádra. Omezení jednotlivých procesů u popisovačů jádra je 2^24. Popisovače jsou však uloženy ve stránkovaném fondu, takže skutečný počet popisovačů, které můžete vytvořit, je založený na dostupné paměti. Počet popisovačů, které můžete vytvořit v 32bitovém systému Windows, je výrazně nižší než 2^24.

Jakýkoli proces může vytvořit nový popisovač existujícího objektu jádra (dokonce i jednoho vytvořeného jiným procesem), za předpokladu, že proces zná název objektu a má k objektu přístup zabezpečení. Mezi popisovače objektů jádra patří přístupová práva, která označují akce, které lze procesu udělit nebo zamítnout. Aplikace určuje přístupová práva při vytváření objektu nebo získá existující popisovač objektu. Každý typ objektu jádra podporuje vlastní sadu přístupových práv. Například obslužné rutiny událostí můžou mít nastavený nebo čekací přístup (nebo obojí), popisovače souborů můžou mít přístup pro čtení nebo zápis (nebo obojí) atd. Další informace naleznete v tématu zabezpečitelné objekty.

Na následujícím obrázku aplikace vytvoří objekt události. Funkce CreateEvent vytvoří objekt události a vrátí popisovač objektu.

aplikace vytvářející objekt události

Po vytvoření objektu události může aplikace použít popisovač události k nastavení nebo čekání na událost. Popisovač zůstane platný, dokud aplikace nezavře popisovač nebo ji ukončí.

Většina objektů jádra podporuje více popisovačů jednoho objektu. Například aplikace na předchozím obrázku by mohla získat další obslužné rutiny objektu události pomocí funkce OpenEvent, jak je znázorněno na následujícím obrázku.

aplikace vytvářející objekt události s více popisovači

Tato metoda umožňuje aplikaci, aby měla popisovače s různými přístupovými právy. Například popisovač 1 může mít nastavený a čekat přístup k události a popisovač 2 může mít pouze čekací přístup.

Pokud jiný proces zná název události a má k objektu přístup zabezpečení, může vytvořit vlastní popisovač objektu události pomocí OpenEvent. Vytvoření aplikace může také duplikovat jeden z jeho popisovačů do stejného procesu nebo do jiného procesu pomocí funkce DuplicateHandle.

Objekt zůstává v paměti, dokud existuje alespoň jeden popisovač objektu. Na následujícím obrázku aplikace používají funkci CloseHandle k zavření popisovačů objektu události. Pokud neexistují žádné obslužné rutiny událostí, systém odebere objekt z paměti, jak je znázorněno na následujícím obrázku.

obslužné rutiny objektu událostí aplikace pro odebrání objektu z paměti

Systém spravuje objekty souborů trochu jinak než jiné objekty jádra. Objekty souboru obsahují ukazatel souboru – ukazatel na další bajt, který se má přečíst nebo zapsat do souboru. Pokaždé, když aplikace vytvoří nový popisovač souboru, systém vytvoří nový objekt souboru. Proto může více než jeden objekt souboru odkazovat na jeden soubor na disku, jak je znázorněno na následujícím obrázku.

více objektů souborů odkazujících na soubor na disku

Pouze prostřednictvím duplikace nebo dědičnosti může více než jeden popisovač souboru odkazovat na stejný objekt souboru, jak je znázorněno na následujícím obrázku.

dva popisovače souborů odkazují na stejný objekt souboru

Následující tabulka uvádí všechny objekty jádra spolu s funkcemi tvůrce a destroyeru jednotlivých objektů. Funkce tvůrce buď vytvoří objekt a popisovač objektu, nebo vytvoří nový existující popisovač objektu. Funkce destroyeru zavře popisovač objektu. Když aplikace zavře poslední popisovač objektu jádra, systém odebere objekt z paměti.

Objekt jádra Funkce Creator Funkce Destroyer
Přístupový token CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, OpenThreadToken CloseHandle
Oznámení o změně FindFirstChangeNotification FindCloseChangeNotification
Komunikační zařízení createfile CloseHandle
Vstup konzoly CreateFile, s CONIN$ CloseHandle
Vyrovnávací paměť obrazovky konzoly CreateFile, s CONOUT$ CloseHandle
Plocha GetThreadDesktop Aplikace nemohou odstranit tento objekt.
Událost CreateEvent, CreateEventEx, OpenEvent CloseHandle
Protokol událostí OpenEventLog, RegisterEventSource, OpenBackupEventLog CloseEventLog
Soubor createfile CloseHandle , DeleteFile
Mapování souborů CreateFileMapping , OpenFileMapping CloseHandle
Najít soubor FindFirstFile FindClose
Halda heapCreate HeapDestroy
Port dokončení vstupně-výstupních operací CreateIoCompletionPort CloseHandle
Práce CreateJobObject CloseHandle
Mailslot CreateMailslot CloseHandle
Oznámení o prostředku paměti CreateMemoryResourceNotification CloseHandle
Modul LoadLibrary, GetModuleHandle FreeLibrary
Mutex CreateMutex, CreateMutexEx, OpenMutex CloseHandle
Potrubí CreateNamedPipe, CreatePipe CloseHandle, DisconnectNamedPipe
Proces CreateProcess , OpenProcess, GetCurrentProcess CloseHandle, TerminateProcess
Semafor CreateSemaphore, CreateSemaphoreEx, OpenSemaphore CloseHandle
Zásuvka soket, přijmout zavření
Vlákno CreateThread, CreateRemoteThread, GetCurrentThread CloseHandle, TerminateThread
Časovač CreateWaitableTimer, CreateWaitableTimerEx, OpenWaitableTimer CloseHandle
Aktualizace prostředku BeginUpdateResource EndUpdateResource
Stanice oken GetProcessWindowStation Aplikace nemohou odstranit tento objekt.

 

obory názvů objektů jádra