MmLockPagableSectionByHandle-Funktion (ntddk.h)
Die MmLockPagableSectionByHandle-Routine sperrt einen auslagerungsfähigen Code oder Datenabschnitt im Systemspeicher, indem die Verweisanzahl für das Handle für den Abschnitt erhöht wird.
Syntax
void MmLockPagableSectionByHandle(
[in] PVOID ImageSectionHandle
);
Parameter
[in] ImageSectionHandle
Das Handle für einen auslagerungsfähigen Code oder Datenabschnitt. Der Aufrufer hat dieses Handle aus einem vorherigen Aufruf der MmLockPagableCodeSection - oder MmLockPagableDataSection-Routine abgerufen.
Rückgabewert
Keine
Bemerkungen
Ein Treiber ruft zunächst MmLockPagableCodeSection oder MmLockPagableDataSection auf, um ein Handle für einen auslagerungsfähigen Code oder Datenabschnitt zu erhalten. Danach kann der Treiber MmLockPagableSectionByHandle und MmUnlockPagableImageSection aufrufen, um die Verweisanzahl auf dem Handle zu erhöhen und zu verringern.
Der Aufruf "MmLockPagableCodeSection " oder " MmLockPagableDataSection " sperrt den auslagerungsfähigen Abschnitt im Systemspeicher, gibt ein Handle an den Abschnitt zurück und initialisiert die Verweisanzahl für das Handle auf eins. MmLockPagableSectionByHandle erhöht die Verweisanzahl um eins, und MmUnlockPagableImageSection dekrementiert die Verweisanzahl um eins.
Wenn die Verweisanzahl auf dem Handle ungleich null ist, wird der auslagerungsfähige Abschnitt gesperrt. Wenn die Verweisanzahl null ist, wird der Abschnitt entsperrt.
Das Handle für den auslagerungsfähigen 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 Verweisanzahl null ist. MmLockPagableSectionByHandle überprüft, ob sich der referenzierte Abschnitt im Adressraum des Aufrufers befindet, und erhöht, wenn dies der Fall ist, einfach die Verweisanzahl im Abschnitt. Wenn der Abschnitt nicht resident ist, werden mmLockPagableSectionByHandle-Seiten im Abschnitt im Systembereich gesperrt und die Verweisanzahl auf 1 festgelegt.
Um zu vermeiden, dass der Systemspeicher verloren geht, muss die Verweisanzahl auf dem Handle null sein, wenn der Treiber aus dem Arbeitsspeicher entladen wird. Andernfalls bleibt der Auslagerungsabschnitt nach dem Entladen des Treibers im Systemspeicher gesperrt.
Wenn der Treiber das Entladen vorbereitet und die Verweisanzahl auf dem Handle ungleich null ist, sollte der Treiber MmUnlockPagableImageSection aufrufen, um die Anzahl vor dem Entladen auf Null zu erhöhen.
Ein Treiber kann MmLockPagableSectionByHandle nicht aufrufen, um Benutzerpuffer zu sperren, die in IRPs übergeben werden. Verwenden Sie stattdessen MmProbeAndLockPages .
Weitere Informationen zum Paging von Code und Daten finden Sie unter Auslagerung von Treibern.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows 2000. |
Zielplattform | Universell |
Header | ntddk.h (include Ntddk.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm) |