MmUnlockPagableImageSection-Funktion (wdm.h)

Die MmUnlockPagableImageSection-Routine gibt einen Abschnitt mit Treibercode oder Treiberdaten frei, der zuvor mit MmLockPagableCodeSection, MmLockPagableDataSection oder MmLockPagableSectionByHandle im Systembereich gesperrt wurde, sodass der Abschnitt wieder ausgelagert werden kann.

Syntax

void MmUnlockPagableImageSection(
  [in] PVOID ImageSectionHandle
);

Parameter

[in] ImageSectionHandle

Gibt das Handle an, das von einem Aufruf von MmLockPagableCodeSection oder MmLockPagableDataSection zurückgegeben wird.

Rückgabewert

Keine

Bemerkungen

Das Handle für den auslagerungsfähigen Abschnitt eines Treibers darf nicht freigegeben werden, wenn der Treiber über ausstehende IRPs in seinen Gerätewarteschlangen oder internen Warteschlangen verfügt. Ein Aufruf von MmUnlockPagableImageSection stellt die Auslagerungsfähigkeit dieses gesamten Abschnitts wieder her, wenn keine Verweise mehr auf das Handle für diesen Abschnitt vorhanden sind.

Der Speicher-Manager verwaltet die Verweisanzahl für das Handle zu einem Abschnitt. Ein ausgelagerter Abschnitt kann nur ausgelagert werden, wenn die Verweisanzahl null 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, damit der Abschnitt ausgelagert werden kann.

Ein Handle ist immer gültig, unabhängig von der Anzahl. Wenn die Anzahl für ein Handle null ist und ein Aufruf von MmLockPagableSectionByHandle erfolgt, wird die Anzahl auf 1 festgelegt, und wenn der Abschnitt ausgelagert wurde, wird er ausgelagert.

In den meisten Fällen wird MmUnlockPagableImageSection vor der Entladeroutine eines Treibers aufgerufen. Das heißt, für einen Treiber mit einem seitenfähigen Abschnitt wird wahrscheinlich die DispatchClose - und/oder DispatchShutdown-RoutineMmUnlockPagableImageSection aufgerufen, bevor seine Unload-Routine aufgerufen wird. Bei nicht ausladbaren Treibern sollte jedoch darauf geachtet werden, dass alle auslagerungsfähigen Abschnitte freigegeben werden, bevor der Treiber selbst aus dem System entladen wird.

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 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

MmLockPagableDataSection

MmLockPagableSectionByHandle

MmPageEntireDriver

MmResetDriverPaging