【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.
函数介绍:
这个函数是专门为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.
函数示例见上一篇日志;
- 【API】MmMapLockedPagesSpecifyCache
- 【API】MmMapLockedPagesSpecifyCache
- API
- api
- API
- API
- api
- API
- API
- API
- API
- API
- API
- API
- API
- API
- api
- api
- What is the program?
- windows 下怎样利用NET-SNMP 发送和接收trap
- 光照贴图生成中的精度问题
- 输出1000以内的素数的算法
- C++ public protected private
- 【API】MmMapLockedPagesSpecifyCache
- windows上文件传到Linux
- Qt 4程序中的new和delete-兼回答网友提问
- 如何使用html页面和aspx页面接收参数
- 数据结构和算法
- 十进制转二进制
- SEO优化:好域名的选择是第一步
- 现在有点迷茫
- spring事务 Transaction rolled back because it has been marked as rollback-only