Freigeben über


MmLockPagableSectionByHandle-Funktion (ntddk.h)

Die MmLockPagableSectionByHandle- Routine sperrt einen ausgelagerten Code oder Datenabschnitt in den Systemspeicher, indem die Verweisanzahl für den Handle auf den Abschnitt erhöht wird.

Syntax

void MmLockPagableSectionByHandle(
  [in] PVOID ImageSectionHandle
);

Parameter

[in] ImageSectionHandle

Das Handle zu einem ausgelagerten Code oder Datenabschnitt. Der Aufrufer hat dieses Handle aus einem vorherigen Aufruf des MmLockPagableCodeSection oder MmLockPagableDataSection Routine abgerufen.

Rückgabewert

Nichts

Bemerkungen

Ein Treiber ruft zunächst MmLockPagableCodeSection oder MmLockPagableDataSection- auf, um ein Handle für einen ausgelagerten Code oder Datenabschnitt abzurufen. Anschließend kann der Treiber MmLockPagableSectionByHandle- aufrufen und MmUnlockPagableImageSection aufrufen, um die Verweisanzahl für das Handle zu erhöhen und zu erhöhen.

Der MmLockPagableCodeSection oder MmLockPagableDataSection sperrt den auslagerungsfähigen Abschnitt in den Systemspeicher, gibt ein Handle an den Abschnitt zurück und initialisiert die Verweisanzahl für das Handle auf eins. MmLockPagableSectionByHandle erhöht die Referenzanzahl um eins, und MmUnlockPagableImageSection die Verweisanzahl um eine erhöht.

Wenn die Bezugsanzahl auf dem Handle ungleich Null ist, ist der seitenfähige Abschnitt gesperrt. Wenn die Bezugsanzahl null ist, wird der Abschnitt entsperrt.

Das Handle für den ausgelagerten Abschnitt bleibt gültig, solange der Treiber im Arbeitsspeicher geladen bleibt. Der Treiber kann dasselbe Handle verwenden, um den Abschnitt wiederholt zu sperren und zu entsperren. Das heißt, der Treiber kann ein Handle wiederverwenden, dessen Bezugsanzahl null ist. MmLockPagableSectionByHandle- überprüft, ob der referenzierte Abschnitt im Adressbereich des Anrufers liegt und in diesem Beispiel einfach die Verweisanzahl im Abschnitt erhöht. Wenn der Abschnitt nicht vorhanden ist, MmLockPagableSectionByHandle- Seiten im Abschnitt, sperrt ihn im Systembereich und legt die Bezugsanzahl auf eine fest.

Um einen Speicherverlust des Systems zu vermeiden, muss die Referenzanzahl auf dem Handle null sein, wenn der Treiber aus dem Speicher entladen wird. Andernfalls bleibt der auslagerungsfähige Abschnitt nach dem Entladen des Treibers in den Systemspeicher gesperrt.

Wenn der Treiber das Entladen vorbereitet und die Verweisanzahl für das Handle ungleich Null ist, sollte der Treiber MmUnlockPagableImageSection aufrufen, um die Anzahl auf Null zu erhöhen, bevor das Entladen eintritt.

Ein Treiber kann MmLockPagableSectionByHandle- nicht aufrufen, um benutzerpuffer zu sperren, die in IRPs übergeben werden. Verwenden Sie stattdessen MmProbeAndLockPages-.

Weitere Informationen zum Auslagerungscode und zu Daten finden Sie unter Making Drivers Pageable.

Anforderungen

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

Siehe auch

MmLockPagableCodeSection

MmLockPagableDataSection-

MmPageEntireDriver-

MmProbeAndLockPages

MmResetDriverPaging

MmUnlockPagableImageSection