这些未公开的Windows 2000核心功能调用(Windows NT 4.0一般也可以调用)是针对
Intel 80386(I386)以上CPU的,没有移植性,可能是微软公司不公开这些调用的原因。
这些调用一般以Ke386 或者KeI386开头,部分调用相当有用,笔者只分析了一部分调用的
函数原型,以后再分析余下的调用。
1、Ke386SetIoAccessMap
函数原型:void Ke386SetIoAccessMap(int, IOPM *);
引出符号:_Ke386SetIoAccessMap@8
2、Ke386QueryIoAccessMap
函数原型:void Ke386QueryIoAccessMap(int, IOPM *);
引出符号:_Ke386QueryIoAccessMap@8
3、Ke386IoSetAccessProcess
函数原型:void Ke386IoSetAccessProcess(PEPROCESS, int);
引出符号:_Ke386IoSetAccessProcess@8
以上3个调用可以让NT/2000像Windows 95/98一样在Ring 3随意通过in/out指令实现
硬件I/O,具体使用方法笔者将在后续文章中说明。
4、Ke386CallBios
函数原型:不详
引出符号:_Ke386CallBios@8
调用功能:可能是BIOS功能调用
5、KeI386SetGdtSelector
函数原型:NTSTATUS KeI386SetGdtSelector(IN ULONG sels, IN PVOID desc);
引出符号:_KeI386SetGdtSelector@8
调用功能:设置一个全局描述符
6、KeI386ReleaseLid
函数原型:不详
引出符号:_KeI386ReleaseLid@8
调用功能:不详
7、KeI386ReleaseGdtSelectors
函数原型:NTSTATUS KeI386ReleaseGdtSelectors(OUT PUSHORT SelArray,
IN int NumOfSelectors);
引出符号:_KeI386ReleaseGdtSelectors@8
调用功能:释放一个全局描述符
8、KeI386MachineType
函数原型:不详
引出符号:_KeI386MachineType
调用功能:可能是取得计算机(CPU)的类型
9、KeI386GetLid
函数原型:不详
引出符号:_KeI386GetLid@20
调用功能:不详
10、KeI386FlatToGdtSelector
函数原型:不详
引出符号:_KeI386FlatToGdtSelector@12
调用功能:可能与内存地址变换有关
11、KeI386Call16BitFunction
函数原型:不详
引出符号:_KeI386Call16BitFunction@4
调用功能:可能与调用16位代码有关
12、KeI386Call16BitCStyleFunction
函数原型:不详
引出符号:_KeI386Call16BitCStyleFunction@16
调用功能:可能与调用16位代码有关
13、KeI386AllocateGdtSelectors
函数原型:NTSTATUS KeI386AllocateGdtSelectors(OUT PUSHORT SelArray,
IN int NumOfSelectors);
引出符号:_KeI386AllocateGdtSelectors@8
调用功能:分配一个全局描述符
该功能与KeI386SetGdtSelector功能、KeI386ReleaseGdtSelectors功能配合使用,可以
修改GDT,从而可以定义自己的调用门,进入真正的NT Ring 0层,从而可以直接修改GDT、
IDT、LDT,直接访问全部内存和全部硬件,功能极其强大。
14、KeI386AbiosCall
函数原型:不详
引出符号:_KeI386AbiosCall@16
调用功能:可能与BIOS功能调用有关
15、Kii386SpinOnSpinLock
函数原型:不详
引出符号:Kii386SpinOnSpinLock@8
调用功能:不详
16、Kei386EoiHelper
函数原型:不详
引出符号:Kei386EoiHelper@0
调用功能:可能与中断处理有关