• 周年纪念勋章活动已圆满结束,如有已购买但仍未申请的用户,可以通过对应勋章的下载链接申请~

C语言 C/C++实现检测 Windows 内核版本

最近闲着无聊做一个小软件,其中有个功能需要检测 Windows 内核版本,花了几个小时简单学习了下 Windows API,就完成了此功能。现在已经实装在软件里,打算分享出来。
(楼主是学 C++ 的,也是用 C++ 实现的。因为前缀里只有 C语言,所以才选的。不清楚 C 能不能实现,如果不能实现麻烦补充一下,感谢 :凝视:

必须包含的头文件:windows.h

代码片段:
C++:
typedef void(__stdcall*NTPROC)(DWORD*,DWORD*,DWORD*);
HINSTANCE inst{LoadLibrary(TEXT("ntdll.dll"))};
NTPROC getSysKernalVersion{(NTPROC)GetProcAddress(inst,"RtlGetNtVersionNumbers")};
DWORD major,minor;
getSysKernalVersion(&major,&minor,NULL);
解释:
1. 定义一个指向void(__stdcall*)(DWORD*,DWORD*,DWORD*)类型的指针NTPROC,用于存储RtlGetNtVersionNumbers函数的地址。
2. 使用LoadLibrary函数加载ntdll.dll
3. 使用GetProcAddress函数获取RtlGetNtVersionNumbers函数在ntdll.dll中的地址,并将其转换为NTPROC类型的指针getSysKernalVersion
4. 定义两个DWORD类型的变量majorminor,用于存储获取到的内核版本信息。
5. 使用getSysKernalVersion函数获取内核版本信息,并将结果存储在majorminor变量中。

注意:因为需要加载ntdll.dll,导致需要管理员权限运行,否则无法加载。

示例代码:
C++:
#include<windows.h>
#include<stdio.h>
int main(){
    typedef void(__stdcall*NTPROC)(DWORD*,DWORD*,DWORD*);
    HINSTANCE inst{LoadLibrary(TEXT("ntdll.dll"))};
    NTPROC getSysKernalVersion{(NTPROC)GetProcAddress(inst,"RtlGetNtVersionNumbers")};
    DWORD major,minor;
    getSysKernalVersion(&major,&minor,NULL);
    printf("Windows Kernal version: %lu.%lu\n",major,minor);
    return 0;
}
 

在线会员

  • xiaobei
  • 小板栗
  • 却冰瑶
  • ymz
  • 椰奶冻冻UwU
  • qwqw
  • 没钱的山海
  • alieleanor
  • Mutike
  • kygomc
  • NewmoonNeko
  • hu7_
  • 出众年华
  • 郎忆菊
  • 超级三国二周目
  • Moyuair
  • 星陨_果酱君
  • shee33
  • Midnight1337
  • 短发
...和 1 更多。
后退
顶部 底部