MmGetSystemAddressForMdlSafe中safe的含义

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,不会引发蓝屏。

转载于:https://www.cnblogs.com/fanzi2009/archive/2010/12/20/1911451.html

你可能感兴趣的:(MmGetSystemAddressForMdlSafe中safe的含义)