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.
函数介绍:
这个函数是专门为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.
函数示例见上一篇日志;