MmLockPagableSectionByHandle-Funktion (ntddk.h)

Die MmLockPagableSectionByHandle-Routine sperrt einen seitenfähigen Code oder datenabschnitt in den Systemspeicher, indem die Referenzanzahl für den Abschnitt erhöht wird.

Syntax

void MmLockPagableSectionByHandle(
  [in] PVOID ImageSectionHandle
);

Parameter

[in] ImageSectionHandle

Der Handle zu einem seitenfähigen Code oder Datenabschnitt. Der Aufrufer hat diesen Handle von einem vorherigen Aufruf an die MmLockPagableCodeSection - oder MmLockPagableDataSection-Routine abgerufen.

Rückgabewert

Keine

Bemerkungen

Ein Treiber ruft zunächst mmLockPagableCodeSection oder MmLockPagableDataSection auf, um einen Handle zu einem seitenfähigen Code oder datenabschnitt abzurufen. Danach kann der Treiber mmLockPagableSectionByHandle und MmUnlockPagableImageSection aufrufen, um die Referenzanzahl im Handle zu erhöhen und zu verringern.

Der MmLockPagableCodeSection- oder MmLockPagableDataSection-Aufruf sperrt den seitenfähigen Abschnitt im Systemspeicher, gibt einen Handle an den Abschnitt zurück, und initialisiert die Referenzanzahl auf dem Handle auf einem. MmLockPagableSectionByHandle erhöht die Referenzanzahl um eine, und MmUnlockPagableImageSection decrement the reference count by one.

Wenn die Referenzanzahl des Handles nicht zero ist, wird der seitenfähige Abschnitt gesperrt. Wenn die Referenzanzahl null ist, wird der Abschnitt entsperrt.

Der Handle für den seitenfähigen Abschnitt bleibt gültig, solange der Treiber im Arbeitsspeicher geladen bleibt. Der Treiber kann denselben Handle verwenden, um den Abschnitt wiederholt zu sperren und zu entsperren. Das heißt, der Treiber kann einen Handle wiederverwenden, dessen Referenzanzahl null ist. MmLockPagableSectionByHandle überprüft, ob der referenzierte Abschnitt im Adressbereich des Anrufers ansässig ist und wenn es sich dabei handelt, einfach die Referenzanzahl im Abschnitt zu erhöhen. Wenn der Abschnitt nicht ansässig ist, sperrt mmLockPagableSectionByHandle-Seiten im Abschnitt, sperrt ihn im Systemraum und legt die Referenzanzahl auf eine fest.

Um den Systemspeicher zu vermeiden, muss die Referenzanzahl des Handles null sein, wenn der Treiber aus dem Arbeitsspeicher geladen wird. Andernfalls bleibt der seitenfähige Abschnitt nach dem Entladen des Treibers in den Systemspeicher gesperrt.

Wenn der Treiber das Laden vorbereitet, und die Referenzanzahl des Handles ist nonzero, sollte der Treiber mmUnlockPagableImageSection aufrufen, um die Anzahl auf Null zu erhöhen, bevor die Entladung auftritt.

Ein Treiber kann mmLockPagableSectionByHandle nicht aufrufen, um Benutzerpuffer zu sperren, die in IRPs übergeben wurden. Verwenden Sie stattdessen MmProbeAndLockPages .

Weitere Informationen zum Paging-Code und -Daten finden Sie unter "Seitenseite für Treiber erstellen".

Anforderungen

   
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header ntddk.h (enthalten Ntddk.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm)

Siehe auch

MmLockPagableCodeSection

MmLockPagableDataSection

MmPageEntireDriver

MmProbeAndLockPages

MmResetDriverPaging

MmUnlockPagableImageSection