分享
 
 
 

用户模式下调用本机API

王朝vc·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

关于本机API的讨论网上已经比较多了。本机API是除了Win32 API,NT平台开放了另一个基本接口。本机API由于它本身运行在Ring0层,接近系统内核,拥有没有限制操作权限,因此微软没有发布支持这种应用的开发方法。尽管如此,并不一定需要驱动级别去访问这个接口,普通的Win32程序可以在任何时候向下调用本机API。

Win32 API中的所有调用最终都转向了ntdll.dll,再由它转发至ntoskrnl.exe。ntdll.dll是本机 API用户模式的终端。真正的接口在ntoskrnl.exe里完成。事实上,内核模式的驱动大部分时间调用这个模块,如果它们请求系统服务。Ntdll.dll的主要作用就是让内核函数的特定子集可以被用户模式下运行的程序调用。Ntdll.dll通过软件中断int 2Eh进入ntoskrnl.exe,也就是通过中断门切换CPU特权级。 关于这方面的讨论网上已有不少了,这里就不多说了。言归正传,如何在用户模式下调用本机API呢?

想要从用户模式下调用本机API函数,必须考虑到以下四点:

1 SDK头文件没有包括这些函数的原型

2 这些函数使用的若干基本数据类型没有包括在SDK文件中

3 SDK和DDK头文件不兼容,不能在win32的c源文件包含ntddk.h中

4 ntdll.lib没有包括在VC的默认导入库列表中。

第4个很容易解决:#progma comment(linker,“/defaultlib:ntdll.lib”)

缺失的定义比较难解决,最简单的方法是写一个自定义的头文件,刚刚包含需要调用ntdll.dll中函数的定义。幸运的是,已经有人做了这个工作。Sven B. Schreiber编写了一个叫“w2k_def.h”的头文件,这个头文件包含需要调用ntdll.dll中函数的定义并可用于用户模式和内核模式程序,所以只需在用户模式代码中#include<w2k_def.h>之前#define _USER_MODE_,使得DDK中出现而SDK中没有的定义可用即可。

下面有个例子供大家参考:

#include <stdio.h>

#include "windows.h"

#define _USER_MODE_

#include <w2k_def.h>

#pragma comment(linker,"/defaultlib:ntdll.lib")

typedef ULONG (CALLBACK* DBGPRINT)(PCHAR,...);

typedef int (CALLBACK* NtGETTICKCOUNT)();

DBGPRINT DbgPrint;

NtGETTICKCOUNT NtGetTickCount;

int main()

{

HMODULE hNtDll;

hNtDll = LoadLibrary( "ntdll.dll" );

if(!hNtDll)

{

printf( "LoadLibrary( NTDLL.DLL ) Error:%d\n", GetLastError() );

return false;

}

DbgPrint = (DBGPRINT)GetProcAddress(hNtDll, "DbgPrint");

NtGetTickCount = (NtGETTICKCOUNT)GetProcAddress(hNtDll, "NtGetTickCount");

int iTime = NtGetTickCount();

DbgPrint("The TickCount is: %d\n",iTime);

DbgPrint("hello\n");

return 0;

}

DbgPrint输出可用用DS的DriverMonitor看到。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有