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

posted @ 2010-12-20 15:19  Fan Zhang  阅读(1432)  评论(0编辑  收藏  举报