日期:2014-05-17  浏览次数:20921 次

内核函数指针问题,想破脑子也搞不明白,求好心人解答
#ifndef _WIN64
#define _os_min_base 0x80000000
#else
#define _os_min_base ((DWORD_PTR)MM_LOWEST_SYSTEM_ADDRESS) 
#endif


DWORD Funptr = (DWORD_PTR) IoAllocateIrp;
Funptr &= ~0xFFF;

if (*(PSHORT)Funptr== 'ZM')
{
//函数返回真

else
{
       Funptr -= PAGE_SIZE;
}
if (Funptr<=_os_min_base)
{
Funptr=0;
//函数返回假

}

==================================================================================
问题1:
MM__LOWEST_SYSTEM_ADDRESS 网上查查是:获得最小的系统空间
                                这个系统空间具体指的啥啊?
问题2:
Funptr &= ~0xFFF;
if (*(PSHORT)Funptr== 'ZM')    这是要判断Funptr最高两字节的值是否等于'ZM',
                               这个高两字节啥情况下等于'ZM',啥时候不等于'ZM'
                               'ZM'又代表什么呢?
问题3:
Funptr -= PAGE_SIZE;           PAGE_SIZE在IDE里查不到定义,但是在源码里依然可以编译通过,
                               这是不是系统内存分页的最小单位,比如x86系统的内存分页最小
                               单位4k
驱动 内核 编程

------解决方案--------------------
代码太短了。
问题1:按我的理解,最小的系统空间。应该就是内核的低地址边界。
就象32位,内核是从0x80000000开始的。而64位就是用那个宏来定义

问题2:这得看具体的内容吧。是ZM?还是MZ?
------解决方案--------------------
判断是否是DOS头吧?