Wann sollten Code und Daten ausgelagert werden können?

Sie können Ihren Treiber ganz oder teilweise auswertbar machen. Das Paging von Treibercode kann die Größe des Ladeimages des Treibers reduzieren und so Systemspeicherplatz für andere Verwendungszwecke freigeben. Es ist am praktischsten für Treiber sporadisch verwendeter Geräte, wie Modems und CD-ROMs, oder für Teile von Treibern, die selten aufgerufen werden.

Der Treibercode, der eine der folgenden Aktionen ausführt, muss speicherresident sein. Das heißt, dieser Code muss sich entweder in einem nicht ausgelagerten Abschnitt oder in einem ausgelagerten Abschnitt befinden, der beim Ausführen des Codes im Arbeitsspeicher gesperrt ist.

  • Wird mit oder über IRQL = DISPATCH_LEVEL ausgeführt.

  • Ruft Drehsperren ab.

  • Ruft eine der Objektunterstützungsroutinen des Kernels auf, z. B. KeReleaseMutex oder KeReleaseSemaphore, in denen der Wait-Parameter auf TRUE festgelegt ist. Wenn der Kernel aufgerufen wird, wobei Wait auf TRUE festgelegt ist, wird der Aufruf mit IRQL bei DISPATCH_LEVEL zurückgegeben.

Treibercode muss bei IRQL < DISPATCH_LEVEL ausgeführt werden, wenn der Code alles tut, was zu einem Seitenfehler führen kann. Code kann einen Seitenfehler verursachen, wenn er eine der folgenden Aktionen ausführt:

  • Greift auf ausgelagerten Pool zu, der nicht im Arbeitsspeicher gesperrt ist.

  • Ruft eine auslagerungsfähige Routine auf.

  • Greift auf entsperrte Benutzerpuffer im Kontext des Benutzerthreads zu.

In der Regel sollten Sie einen Abschnitt ausblättern, wenn die Gesamtmenge des gesamten ausstellbaren Codes (oder der Daten) mindestens 4 KB beträgt. Wann immer möglich, sollten Sie rein ausseitigen Code (oder Daten) in einen separaten Abschnitt von Code (oder Daten) isolieren, der manchmal auslagerungsfähig sein kann, aber manchmal gesperrt werden muss. Beispielsweise führt die Kombination von rein ausseitigem Code und gesperrtem Bei-Bedarf-Code dazu, dass mehr Systemspeicherplatz für den kombinierten Abschnitt gesperrt wird, als erforderlich ist. Wenn ein Treiber jedoch über weniger als 4 KB möglicherweise auslagerungsfähigen Code (oder Daten) verfügt, können Sie diesen Code (oder die Daten) mit gesperrtem On-Demand-Code (oder Daten) in einem Abschnitt kombinieren, um Systemspeicherplatz zu sparen.