【API】MmMapLockedPagesSpecifyCache

来源:互联网 发布:nginx 虚拟目录 编辑:程序博客网 时间:2024/06/07 21:08

MmMapLockedPagesSpecifyCache

 
  MmMapLockedPagesSpecifyCache
  函数介绍:
  这个函数是专门为2000之后的windows版本设计的,在2000或者98甚至更早版本中,用的是函数:MmMapLockedPages;
  函数原型:
  NTKERNELAPI PVOID
    MmMapLockedPagesSpecifyCache(
      IN PMDL  MemoryDescriptorList,
      IN KPROCESSOR_MODE  AccessMode,
      IN MEMORY_CACHING_TYPE  CacheType,
      IN PVOID  BaseAddress,
      IN ULONG  BugCheckOnFailure,
      IN MM_PAGE_PRIORITY  Priority    );
  函数参数介绍:
   PMDL  MemoryDescriptorList 这是一个MDL(Memory Descriptor List)结构体指针,用函数IoAllocateMdl得到这个值 。
  KPROCESSOR_MODE  AccessMode 这是一个程序的运行模式,即用户模式,和内核模式;对于驱动程序,设置成,KernelMode 。用户模式为UserMode;
  MEMORY_CACHING_TYPE  CacheType :这指定了一个MEMORY_CACHING_TYPE类型的值,表明允许这个MDL使用的缓冲区的类型
  PVOID  BaseAddress:如果AccessMode为UserMode,这个参数指定了要把这个MDL映射到用户模式中的起始地址;如果设置成NULL,那么将由系统自行选择。系统可能由于边界条件限制,会把这个值改成更合适的值,所以要检查返回值。这是MSDN上的说法,我的建议是直接设置成NULL。
  ULONG  BugCheckOnFailure:申明对错误的处理,设置成TRUE 的话,那么会弹出一个错误检查;如果设置成FALSE,那么直接返回NULL。驱动必须设置成NULL。
  MM_PAGE_PRIORITY  Priority:(MSDN翻译)表明当PTEs稀有的时候,成功的重要性。要获取这个值的枚举值,请查MmGetSystemAddressForMdlSafe.大概的意思是,当系统资源紧缺的时候,你对这个函数成功与否的要求高不高,如果高的话设置成HighPagePriority;本人建议设置成NormalPagePriority
  返回值:
  成功的话返回起始地址,失败返回NULL;建议:
  ·要取消映射用函数MmUnmapLockedPages
  ·当为KernelMode模式的时候,如果函数失败,见参数BugCheckOnFailure
  ·当为UserMode模式的时候,如果函数失败,本函数会抛出一个异常,请用try/catch进行捕捉。
  头文件:
  Declared in ntddk.h. Include ntddk.h.
函数示例见上一篇日志;