您的位置:首页 > 其它

ring3层程序调用ring0层API

2014-05-22 20:57 495 查看
我已经写代码一年多了,原来一直以为,在ring3层下只能使用ring3层的API,如果想自己由程序猿决定调用RING0层的API的话,只能写驱动了,结果发现不是这样的,在此做个记录,表示一下自己的白痴程度,引以为戒哈,在这里只写两个函数首先ZwQuerySystemInfo函数,首先该函数是微软未开源的函数,但是我们只知道他的函数声明,利用LoadLibrary和GetProcAddress两个函数在ntdll.dll文件中即可得到,我们现在来进行函数声明吧

typedef NTSTATUS ( __stdcall *ZWQUERYSYSTEMINFORMATION ) ( IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
 IN OUT PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength OPTIONAL );


函数声明是这样子的,声明了函数类型是ZWQUERYSYSTEMINFO,我们在进行该函数类型的实体即可

HANDLE g_hNtDLL = LoadLibrary( "ntdll.dll" );

if ( !g_hNtDLL )

{

return ;

}

ZWQUERYSYSTEMINFORMATION sys= (ZWQUERYSYSTEMINFORMATION )GetProcAddress( (HMODULE)g_hNtDLL, "ZwQuerySystemInformation");

这样我们就可以使用ZwQuerySystemInformation函数了现在只是有些疑虑的是_stdcall函数声明,这样是不是说明ZwQuerySystemInformation函数在ntdll中也是以C++的形式编译的??不太清楚,但是知道这样可以使用了大神路过即可哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: