MmGetSystemAddressForMdlSafe和MmGetSystemAddressForMdl其实都是宏,都直接或间接的调用了MmMapLockedPagesSpecifyCache内核函数。
MmMapLockedPagesSpecifyCache的声明如下:

  1. NTKERNELAPI PVOID
  2.   MmMapLockedPagesSpecifyCache(
  3.     IN PMDL  MemoryDescriptorList,
  4.     IN KPROCESSOR_MODE  AccessMode,
  5.     IN MEMORY_CACHING_TYPE  CacheType,
  6.     IN PVOID  BaseAddress,
  7.     IN ULONG  BugCheckOnFailure,
  8.     IN MM_PAGE_PRIORITY  Priority
  9.     );
复制代码

注意到倒数第二个参数 BugCheckOnFailure了吧,如果是TRUE,在map发生错误的时候会引发bugcheck(就是蓝屏)。如果是FALSE,则不会引发bugcheck,而是函数返回NULL。
MmGetSystemAddressForMdlSafe之所以安全,就是把这个参数设置为FALSE,不会引发蓝屏。

相关文章:

  • 2021-12-17
  • 2021-08-20
  • 2021-11-16
  • 2021-08-06
  • 2021-11-14
  • 2021-11-14
  • 2021-08-25
  • 2021-11-21
猜你喜欢
相关资源
相似解决方案