Kernelobjekte
Kernelobjekthandles sind prozessspezifisch. Das heißt, ein Prozess muss entweder das -Objekt erstellen oder ein vorhandenes -Objekt öffnen, um ein Kernelobjekthandle zu erhalten. Der Grenzwert pro Prozess für Kernelhandles beträgt 2^24. Handles werden jedoch im ausgelagerten Pool gespeichert, sodass die tatsächliche Anzahl der Handles, die Sie erstellen können, auf dem verfügbaren Arbeitsspeicher basiert. Die Anzahl der Handles, die Sie unter 32-Bit-Windows erstellen können, ist deutlich niedriger als 2^24.
Jeder Prozess kann ein neues Handle für ein vorhandenes Kernelobjekt erstellen (auch eines, das von einem anderen Prozess erstellt wurde), vorausgesetzt, der Prozess kennt den Namen des Objekts und hat Sicherheitszugriff auf das Objekt. Kernel-Objekthandles enthalten Zugriffsrechte, die die Aktionen angeben, die einem Prozess gewährt oder verweigert werden können. Eine Anwendung gibt Zugriffsrechte an, wenn sie ein Objekt erstellt oder ein vorhandenes Objekthandle abruft. Jeder Typ von Kernelobjekt unterstützt seinen eigenen Satz von Zugriffsrechten. Beispielsweise können Ereignishandles den Zugriff festlegen oder warten (oder beides), Dateihandles können Lese- oder Schreibzugriff (oder beides) haben usw. Weitere Informationen finden Sie unter Sicherungsfähige Objekte.
In der folgenden Abbildung erstellt eine Anwendung ein Ereignisobjekt. Die CreateEvent-Funktion erstellt das Ereignisobjekt und gibt ein Objekthandle zurück.
Nachdem das Ereignisobjekt erstellt wurde, kann die Anwendung das Ereignishandle verwenden, um das Ereignis festzulegen oder darauf zu warten. Das Handle bleibt gültig, bis die Anwendung das Handle schließt oder beendet.
Die meisten Kernelobjekte unterstützen mehrere Handles für ein einzelnes Objekt. Beispielsweise könnte die Anwendung in der vorherigen Abbildung zusätzliche Ereignisobjekthandles mithilfe der OpenEvent-Funktion abrufen, wie in der folgenden Abbildung gezeigt.
Diese Methode ermöglicht es einer Anwendung, Über Handles mit unterschiedlichen Zugriffsrechten zu verfügen. Beispielsweise kann Handle 1 den Zugriff auf das Ereignis festgelegt und gewartet haben, und Handle 2 hat möglicherweise nur Wartezugriff.
Wenn ein anderer Prozess den Ereignisnamen kennt und über Sicherheitszugriff auf das Objekt verfügt, kann er mithilfe von OpenEvent ein eigenes Ereignisobjekthandle erstellen. Die erstellte Anwendung kann auch mithilfe der DuplicateHandle-Funktion eines ihrer Handles in denselben Prozess oder in einen anderen Prozess duplizieren.
Ein Objekt verbleibt im Arbeitsspeicher, solange mindestens ein Objekthandle vorhanden ist. In der folgenden Abbildung verwenden die Anwendungen die CloseHandle-Funktion , um ihre Ereignisobjekthandles zu schließen. Wenn keine Ereignishandles vorhanden sind, entfernt das System das -Objekt aus dem Arbeitsspeicher, wie in der folgenden Abbildung gezeigt.
Das System verwaltet Dateiobjekte etwas anders als andere Kernelobjekte. Dateiobjekte enthalten den Dateizeiger – den Zeiger auf das nächste Byte, das in einer Datei gelesen oder geschrieben werden soll. Wenn eine Anwendung ein neues Dateihandle erstellt, erstellt das System ein neues Dateiobjekt. Daher können mehr als ein Dateiobjekt auf eine einzelne Datei auf dem Datenträger verweisen, wie in der nächsten Abbildung gezeigt.
Nur durch Duplizierung oder Vererbung können mehrere Dateihandles auf dasselbe Dateiobjekt verweisen, wie in der folgenden Abbildung gezeigt.
In der folgenden Tabelle sind die einzelnen Kernelobjekte zusammen mit den Ersteller- und Zerstörerfunktionen jedes Objekts aufgeführt. Die Erstellerfunktionen erstellen entweder das Objekt und ein Objekthandle oder erstellen ein neues vorhandenes Objekthandle. Die Zerstörerfunktionen schließen das Objekthandle. Wenn eine Anwendung das letzte Handle für ein Kernelobjekt schließt, entfernt das System das Objekt aus dem Arbeitsspeicher.
Zugehörige Themen