Standardereignisobjekte
Das System stellt mehrere Standardereignisobjekte bereit. Treiber können diese Ereignisobjekte verwenden, um vom System benachrichtigt zu werden, wenn bestimmte Bedingungen auftreten. Die folgende Liste enthält die Standardereignisobjekte:
\KernelObjects\HighMemoryCondition
Dieses Ereignis wird immer dann festgelegt, wenn die Menge des freien physischen Arbeitsspeichers eine systemdefinierte Menge überschreitet. Treiber können warten, bis dieses Ereignis als Signal für die aggressive Zuweisung von Arbeitsspeicher festgelegt wird.
\KernelObjects\LowMemoryCondition
Dieses Ereignis wird immer dann festgelegt, wenn die Menge des freien physischen Arbeitsspeichers unter eine systemdefinierte Menge fällt. Treiber, die große Mengen an Arbeitsspeicher zugewiesen haben, können warten, bis dieses Ereignis als Signal festgelegt wird, um nicht genutzten Arbeitsspeicher freizugeben.
Für Microsoft Windows Server 2003 und höhere Versionen von Windows können Treiber auch die folgenden zusätzlichen Standardereignisobjekte verwenden:
\KernelObjects\HighPagedPoolCondition
Dieses Ereignis wird immer dann festgelegt, wenn die Menge des kostenlosen ausgelagerten Pools einen systemdefinierten Betrag überschreitet. Treiber können warten, bis dieses Ereignis als Signal für die aggressive Zuweisung von Arbeitsspeicher aus einem ausgelagerten Pool festgelegt wird.
\KernelObjects\LowPagedPoolCondition
Dieses Ereignis wird immer dann festgelegt, wenn die Menge des kostenlosen ausgelagerten Pools unter einen systemdefinierten Betrag fällt. Treiber, die große Mengen an Arbeitsspeicher zugewiesen haben, können warten, bis dieses Ereignis als Signal festgelegt wird, um nicht verwendeten Arbeitsspeicher aus einem ausgelagerten Pool freizugeben.
\KernelObjects\HighNonPagedPoolCondition
Dieses Ereignis wird immer dann festgelegt, wenn die Menge des kostenlosen, nicht auslagerten Pools einen systemdefinierten Betrag überschreitet. Treiber können warten, bis dieses Ereignis als Signal für die aggressive Zuweisung von Arbeitsspeicher aus einem nicht auslagerten Pool festgelegt wird.
\KernelObjects\LowNonPagedPoolCondition
Dieses Ereignis wird immer dann festgelegt, wenn die Menge des kostenlosen, nicht auslagerten Pools unter einen systemdefinierten Betrag fällt. Treiber, die große Mengen an Arbeitsspeicher zugewiesen haben, können warten, bis dieses Ereignis als Signal festgelegt wird, um nicht verwendeten Arbeitsspeicher aus einem nicht auslagerten Pool freizugeben.
Für Windows Vista und höhere Versionen von Windows können Treiber auch die folgenden zusätzlichen Standardereignisobjekte verwenden:
\KernelObjects\LowCommitCondition
Dieses Ereignis wird festgelegt, wenn die Commitgebühr des Betriebssystems relativ zum aktuellen Commitlimit niedrig ist. Mit anderen Worten, die Arbeitsspeicherauslastung ist gering und viel Speicherplatz im physischen Arbeitsspeicher oder in Auslagerungsdateien verfügbar.
\KernelObjects\HighCommitCondition
Dieses Ereignis wird festgelegt, wenn die Commitgebühr des Betriebssystems relativ zum aktuellen Commitlimit hoch ist. Mit anderen Worten, die Arbeitsspeicherauslastung ist hoch und im physischen Arbeitsspeicher oder in Auslagerungsdateien ist nur sehr wenig Speicherplatz verfügbar, aber das Betriebssystem kann möglicherweise die Größe seiner Auslagerungsdateien erhöhen.
\KernelObjects\MaximumCommitCondition
Dieses Ereignis wird festgelegt, wenn die Commitgebühr des Betriebssystems nahe dem maximalen Commitlimit liegt. Mit anderen Worten, die Arbeitsspeicherauslastung ist sehr hoch, im physischen Arbeitsspeicher oder in Auslagerungsdateien ist sehr wenig Speicherplatz verfügbar, und das Betriebssystem kann die Größe seiner Auslagerungsdateien nicht erhöhen. (Ein Systemadministrator kann die Größe oder Anzahl der Auslagerungsdateien jederzeit erhöhen, ohne den Computer neu zu starten, wenn genügend Speicherressourcen vorhanden sind.)
Jedes dieser Ereignisse ist Benachrichtigungsereignisse. Sie bleiben festgelegt, solange die auslösende Bedingung wahr bleibt.
Verwenden Sie die IoCreateNotificationEvent-Routine , um ein Handle für eines dieser Ereignisse zu öffnen. Ein Treiber, der auf eines dieser Ereignisse wartet, sollte einen dedizierten Thread erstellen, um die Wartezeit auszuführen. Der Thread kann auf eines oder mehrere dieser Ereignisse warten, indem entweder KeWaitForSingleObject oder KeWaitForMultipleObjects aufgerufen wird.