Freigeben über


MmLockPagableDataSection-Funktion (wdm.h)

Die MmLockPagableDataSection-Routine sperrt einen gesamten Abschnitt von Treiberdaten im Systembereich.

Syntax

PVOID MmLockPagableDataSection(
  [in] PVOID AddressWithinSection
);

Parameter

[in] AddressWithinSection

Gibt die symbolische Adresse eines Datenelements im auslagerungsfä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.

Hinweise

Treiber können diese Routine, MmLockPagableSectionByHandle und MmUnlockPagableImageSection verwenden, um ihre privaten Daten, die normalerweise auslagerungsfähig sind, im Arbeitsspeicher zu sperren.

Daten können gesperrt werden, wenn:

  • Auf die Daten wird normalerweise mit <= APC_LEVEL zugegriffen, aber möglicherweise muss für kurze Zeit auf höheren IRQL-Ebenen zugegriffen werden.

  • Der Treiber verwendet die Daten selten und vorhersagbar.

Treiber für Mixergeräte verwenden z. B. Auslagerungsdatenabschnitte. Da der Treiber genügend Daten verwendet, um das Erstellen eines Pageable-Data-Abschnitts lohnenswert zu machen 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 Systemraum zu bringen und ihn zur Auslagerung verfügbar zu machen, wenn er nicht benötigt wird.

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

Es ist ein teurer Vorgang, einen Abschnitt zu sperren. Wenn ein Pageable-Data-Abschnitt von einem Treiber an mehreren Stellen gesperrt wird, verwenden Sie MmLockPagableDataSection für die erste Anforderung. Führen Sie nachfolgende Sperranforderungen aus, indem Sie MmLockPagableSectionByHandle aufrufen und das von MmLockPagableDataSection zurückgegebene Handle übergeben. Das Sperren per Handle verbessert die Treiberleistung erheblich. Ein gesperrter Abschnitt wird durch Aufrufen von MmUnlockPagableImageSection entsperrt.

Der Speicher-Manager verwaltet eine Verweisanzahl für den Abschnitt. Ein Auslagerungsdatenabschnitt ist nur verfügbar, um ausgelagert zu werden, wenn die Verweisanzahl 0 ist. Jede Sperranforderung erhöht die Anzahl; Jede Entsperranforderung verringert die Anzahl. Ein Treiber muss einen Abschnitt so oft entsperren, wie er einen Abschnitt sperrt, um sicherzustellen, dass ein solcher Abschnitt zum Ausblättern verfügbar ist, wenn der Abschnitt nicht benötigt wird. Ein Handle ist immer gültig, unabhängig von der Anzahl. Wenn die Anzahl eines Handles 0 ist und mmLockPagableSectionByHandle aufgerufen wird, wird die Anzahl auf 1 festgelegt, und wenn der Abschnitt ausgelagert wurde, wird er ausgelagert.

Daten in einem Pageable-Data-Abschnitt 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 Schlüsselwort (keyword) PAGE wird die Groß-/Kleinschreibung beachtet, d. h. PAGE muss groß geschrieben werden.

Beachten Sie, dass es auch eine #pragma data_seg("INIT") gibt, die verwendet wird, um Daten nach der Systeminitialisierung verwerfen zu 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 auswertbar. Wenn die INIT-Anweisung verwendet wird, werden die Daten im Abschnitt verworfen, sobald der Treiber von seiner Treibereingaberoutine oder seiner Reitialisierungsroutine zurückkehrt, wenn der Treiber über eine verfügt.

Weitere Informationen zum Paging von Daten finden Sie unter Auslagerung von Treibern.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=APC_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm)

Weitere Informationen

MmLockPagableCodeSection

MmLockPagableSectionByHandle

MmPageEntireDriver

MmResetDriverPaging

MmUnlockPagableImageSection