最近闲着无聊做一个小软件,其中有个功能需要检测 Windows 内核版本,花了几个小时简单学习了下 Windows API,就完成了此功能。现在已经实装在软件里,打算分享出来。
(楼主是学 C++ 的,也是用 C++ 实现的。因为前缀里只有 C语言,所以才选的。不清楚 C 能不能实现,如果不能实现麻烦补充一下,感谢
)
必须包含的头文件:
代码片段:
解释:
1. 定义一个指向
2. 使用
3. 使用
4. 定义两个
5. 使用
注意:因为需要加载
示例代码:
(楼主是学 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
类型的变量major
和minor
,用于存储获取到的内核版本信息。5. 使用
getSysKernalVersion
函数获取内核版本信息,并将结果存储在major
和minor
变量中。注意:因为需要加载
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;
}