Auf Englisch lesen

Teilen über


MmLockPagableDataSection-Funktion (wdm.h)

Die MmLockPagableDataSection Routine sperrt einen gesamten Abschnitt der Treiberdaten in den Systemraum.

Syntax

C++
PVOID MmLockPagableDataSection(
  [in] PVOID AddressWithinSection
);

Parameter

[in] AddressWithinSection

Gibt die symbolische Adresse eines Datenelements im seitenfähigen Abschnitt an.

Rückgabewert

MmLockPagableDataSection gibt einen undurchsichtigen Wert zurück, der den Abschnitt identifiziert. Dieser Wert muss anschließend an MmLockPagableSectionByHandle- oder an MmUnlockPagableImageSectionübergeben werden.

Bemerkungen

Treiber können diese Routine, MmLockPagableSectionByHandle, und MmUnlockPagableImageSection verwenden, um ihre privaten Daten, die in der Regel seitenfähig sind, in den Speicher zu sperren.

Daten können gesperrt werden, wenn:

  • Auf die Daten wird in der Regel unter <= APC_LEVEL zugegriffen, aber möglicherweise muss für kurze Zeiträume auf höheren IRQL-Ebenen zugegriffen werden.

  • Der Treiber verwendet die Daten selten und vorhersehbar.

Beispielsweise verwenden Treiber für Mixergeräte seitenfähige Datenabschnitte. Da der Treiber ausreichend Daten verwendet, um das Erstellen eines seitenfähigen Datenabschnitts zu lohnen und der Treiber weiß, wann die Daten benötigt werden, verwendet ein solcher Treiber MmLockPagableDataSection, MmLockPagableSectionByHandle und MmUnlockPagableImageSection, um einen Datenabschnitt bei Bedarf in den Systembereich zu bringen und verfügbar zu machen, wenn nicht erforderlich.

Ein einzelner Aufruf von MmLockPagableDataSection bewirkt, dass der gesamte Abschnitt, der die referenzierten Daten enthält, in den Systembereich gesperrt wird.

Es handelt sich um einen kostspieligen Vorgang, um einen Abschnitt zu sperren. Wenn ein Auslagerungsdatenabschnitt an mehreren Stellen von einem Treiber gesperrt ist, verwenden Sie MmLockPagableDataSection- für die erste Anforderung. Führen Sie nachfolgende Sperranforderungen durch Aufrufen MmLockPagableSectionByHandledurch, wobei das von MmLockPagableDataSectionzurückgegebene Handle übergeben wird. Das Sperren durch handle verbessert die Treiberleistung erheblich. Ein gesperrter Abschnitt wird durch Aufrufen von MmUnlockPagableImageSectionentsperrt.

Der Speicher-Manager verwaltet eine Referenzanzahl für den Abschnitt. Ein ausgelagerter Datenabschnitt kann nur ausgelagert werden, wenn die Bezugsanzahl null ist. Jede Sperranforderung erhöht die Anzahl; Jede Entsperranforderung erhöht die Anzahl. Ein Treiber muss einen Abschnitt so oft entsperren, wie er einen Abschnitt sperrt, um sicherzustellen, dass ein solcher Abschnitt ausgelagert werden kann, wenn der Abschnitt nicht benötigt wird. Ein Handle ist immer gültig, unabhängig davon, was die Anzahl ist. Wenn die Anzahl eines Handles null ist und ein Aufruf an MmLockPagableSectionByHandle-erfolgt, wird die Anzahl auf eins festgelegt, und wenn der Abschnitt ausgelagert wurde, wird er ausgelagert.

Daten in einem ausgelagerten Datenabschnitt werden durch eine Compilerdirektive gekennzeichnet. Verwenden Sie zum Erstellen eines ausgelagerten Datenabschnitts #pragma data_seg ("PAGE"), am Anfang des Datenmoduls und #pragma data_seg () am Ende des Moduls. Bei dem Schlüsselwort PAGE- wird die Groß-/Kleinschreibung beachtet, d. h., PAGE- großgeschrieben werden muss.

Beachten Sie, dass es auch eine #pragma data_seg("INIT") gibt, mit der Daten nach der Systeminitialisierung verworfen werden können. Mit Ausnahme der Verwendung von INIT- anstelle von PAGE-ist die Syntax identisch. Das Ergebnis ist jedoch nicht; Die Verwendung der PAGE--Direktive macht den Datenabschnitt seitenfähig. Wenn die INIT--Direktive verwendet wird, werden die Daten im Abschnitt verworfen, sobald der Treiber von seiner Treibereingaberoutine oder seiner Reinitialisierungsroutine zurückkehrt, wenn der Treiber über einen verfügt.

Weitere Informationen zum Auslagerungsdaten finden Sie unter Making Drivers Pageable.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <=APC_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm)

Siehe auch

MmLockPagableCodeSection

MmLockPagableSectionByHandle-

MmPageEntireDriver-

MmResetDriverPaging

MmUnlockPagableImageSection