MmLockPagableSectionByHandle 函数 (ntddk.h)

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

语法

void MmLockPagableSectionByHandle(
  [in] PVOID ImageSectionHandle
);

参数

[in] ImageSectionHandle

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

返回值

没有

言论

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

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

如果句柄上的引用计数为非零,则会锁定可分页节。 如果引用计数为零,则取消锁定节。

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

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

如果驱动程序准备卸载,并且句柄上的引用计数为非零,驱动程序应调用 MmUnlockPagableImageSection 将计数递减为零,然后再卸载。

驱动程序无法调用 MmLockPagableSectionByHandle 来锁定传入 IRP 的用户缓冲区。 请改用 mmProbeAndLockPages

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

要求

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

另请参阅

mmLockPagableCodeSection

mmLockPagableDataSection

mmPageEntireDriver

mmProbeAndLockPages

mmResetDriverPaging

mmUnlockPagableImageSection