MmLockPagableSectionByHandle 函数 (ntddk.h)

MmLockPagableSectionByHandle 例程通过递增节的句柄上的引用计数,将可分页代码或数据节锁定到系统内存中。

语法

void MmLockPagableSectionByHandle(
  [in] PVOID ImageSectionHandle
);

参数

[in] ImageSectionHandle

可分页代码或数据节的句柄。 调用方从对 MmLockPagableCodeSection 或 MmLockPagableDataSection程的上一次调用中获取了此句柄。

返回值

备注

驱动程序最初调用 MmLockPagableCodeSectionMmLockPagableDataSection 以获取可分页代码或数据节的句柄。 此后,驱动程序可以调用 MmLockPagableSectionByHandleMmUnlockPagableImageSection 来递增和递减句柄上的引用计数。

MmLockPagableCodeSectionMmLockPagableDataSection 调用将可分页节锁定到系统内存中,返回节的句柄,并将句柄上的引用计数初始化为 1。 MmLockPagableSectionByHandle 将引用计数递增 1,MmUnlockPagableImageSection 将引用计数递减 1。

如果句柄上的引用计数不为零,则会锁定可分页节。 如果引用计数为零,则分区处于解锁状态。

只要驱动程序保留在内存中加载,可分页节的句柄就保持有效。 驱动程序可以使用同一句柄重复锁定和解锁分区。 也就是说,驱动程序可以重用引用计数为零的句柄。 MmLockPagableSectionByHandle 检查引用的节是否驻留在调用方地址空间中,如果位于调用方地址空间中,则只需递增节上的引用计数。 如果节不驻留,则分区中的 MmLockPagableSectionByHandle 页将其锁定在系统空间中,并将引用计数设置为 1。

为了避免泄漏系统内存,从内存中卸载驱动程序时,句柄上的引用计数必须为零。 否则,在驱动程序卸载后,可分页部分将一直锁定在系统内存中。

如果驱动程序准备卸载,并且句柄上的引用计数为非零,则驱动程序应调用 MmUnlockPagableImageSection ,以在卸载发生之前将计数减至零。

驱动程序无法调用 MmLockPagableSectionByHandle 来锁定在 IRP 中传递的用户缓冲区。 请改用 MmProbeAndLockPages

有关分页代码和数据的详细信息,请参阅 使驱动程序可分页

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 ntddk.h (包括 Ntddk.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlMmApcLte (wdm)

另请参阅

MmLockPagableCodeSection

MmLockPagableDataSection

MmPageEntireDriver

MmProbeAndLockPages

MmResetDriverPaging

MmUnlockPagableImageSection