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