ring3层程序调用ring0层API

来源:互联网 发布:淘宝的需求分析和设计 编辑:程序博客网 时间:2024/05/29 02:22

    我已经写代码一年多了,原来一直以为,在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++的形式编译的??不太清楚,但是知道这样可以使用了大神路过即可哈

0 0
原创粉丝点击