【API】MmMapLockedPagesSpecifyCache

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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值