ring3层程序调用ring0层API
2014-05-22 20:57
495 查看
我已经写代码一年多了,原来一直以为,在ring3层下只能使用ring3层的API,如果想自己由程序猿决定调用RING0层的API的话,只能写驱动了,结果发现不是这样的,在此做个记录,表示一下自己的白痴程度,引以为戒哈,在这里只写两个函数首先ZwQuerySystemInfo函数,首先该函数是微软未开源的函数,但是我们只知道他的函数声明,利用LoadLibrary和GetProcAddress两个函数在ntdll.dll文件中即可得到,我们现在来进行函数声明吧
函数声明是这样子的,声明了函数类型是ZWQUERYSYSTEMINFO,我们在进行该函数类型的实体即可
HANDLE g_hNtDLL = LoadLibrary( "ntdll.dll" );
if ( !g_hNtDLL )
{
return ;
}
ZWQUERYSYSTEMINFORMATION sys= (ZWQUERYSYSTEMINFORMATION )GetProcAddress( (HMODULE)g_hNtDLL, "ZwQuerySystemInformation");
这样我们就可以使用ZwQuerySystemInformation函数了现在只是有些疑虑的是_stdcall函数声明,这样是不是说明ZwQuerySystemInformation函数在ntdll中也是以C++的形式编译的??不太清楚,但是知道这样可以使用了大神路过即可哈
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++的形式编译的??不太清楚,但是知道这样可以使用了大神路过即可哈
相关文章推荐
- 程序调用飞信API发送免费短信(JAVA例子,其他语言一样用)
- 循序渐进实现仿QQ界面演示程序编译问题及MFC调用RingSDK图象库示例
- C#调用API实现程序间相互控制(附源码)
- C#调用API向外部程序发送数据
- 调用Java系统API获取当前程序占用内存
- 监视API调用的一个小程序
- 在Java程序中调用Salesforce REST API
- DSP/BIOS程序开发四:基础类API调用
- Delphi程序API申明调用及参数传址与传值
- 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例
- 调用API为程序实例设置代理(VB)
- 程序调用飞信API发送免费短信(JAVA例子,其他语言一样用)
- 怎样在 S60 Qt 程序里调用 Symbian API
- python 实现redis 操作API 接口,提供其他程序调用
- OpenFlight API调用之一--编译自己的程序
- 拖管程序调用非拖管API
- 程序调用飞信API发送免费短信(JAVA例子,其他语言一样用)
- 引用程序、API、系统调用
- c#调用API(GetModuleFileName)获取程序路径返回乱码有关问题
- Linux系统调用的“三层皮”:API,中断服务程序,内核服务程序