首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > windows >

内核函数指针有关问题,想破脑子也搞不明白,求好心人解答

2013-02-19 
内核函数指针问题,想破脑子也搞不明白,求好心人解答#ifndef _WIN64#define _os_min_base 0x80000000#else#

内核函数指针问题,想破脑子也搞不明白,求好心人解答
#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头吧?

热点排行