通过NtCurrentTeb获取系统版本

本文介绍了在Windows系统中,由于API不再适用,如何通过NtCurrentTeb函数获取当前系统的版本信息。文章提到在MFC工程中直接使用NtCurrentTeb会导致编译错误,因此采取动态加载DLL的方法来解决这个问题。实验证明,该方法适用于Windows XP及更高版本,但在NT4、2000和98系统上的表现未进行测试。
摘要由CSDN通过智能技术生成

最近获取Windows版本号,发现win10系统显示6.2版,试了几个API函数都是显示6.2,然后一查,原来MS淘汰了这些API。
那么就只好用PEB来获取系统版本了。

MSDN上面寥寥几句

NtCurrentTeb function (winnt.h)
Article
06/30/2021
2 minutes to read
The NtCurrentTeb routine returns a pointer to the Thread Environment Block (TEB) of the current thread.

Syntax
C++

Copy
_TEB * NtCurrentTeb();
Return value
A pointer to the thread environment block of the current thread.

Requirements

Minimum supported client Available in Windows 7 and later versions of Windows.
Target Platform Universal
Header winnt.h
See also
NtXxx Routines

使用条件倒是很简单
新建个mfc工程

#include <winnt.h>
NtCurrentTeb();

--------------------Configuration: test - Win32 Debug--------------------
Compiling…
testDlg.cpp
Linking…
testDlg.obj : error LNK2001: unresolved external symbol _NtCurrentTeb
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

test.exe - 1 error(s), 0 warning(s)

编译,结果报错了,error LNK2001,缺lib文件,然后也没有找到ntdll.lib,也就是VC6里面没法直接使用这个函数了,那就换个方法,动态加载dll,然后调用这个函数。

H文件

typedef struct _PEB {
   
    BOOLEAN InheritedAddressSpace;
    BOOLEAN ReadImageFileExecOptions;
    BOOLEAN BeingDebugged;
    BOOLEAN BitField;
    HANDLE Mutant;
    PVOID ImageBaseAddress;
    PVOID Ldr;
    PVOID ProcessParameters;
    PVOID SubSystemData;
    PVOID ProcessHeap;
    PVOID FastPebLock;
    PVOID AtlThunkSListPtr;
    PVOID SparePtr2;
    ULONG EnvironmentUpdateCount
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值