VS2019中GetVersion没法使用提示过期,用下面的函数来替代
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;
PVOID KernelCallbackTable;
ULONG SystemReserved[1];
ULONG SpareUlong;
PVOID FreeList;
ULONG TlsExpansionCounter;
PVOID TlsBitmap;
ULONG TlsBitmapBits[2];
PVOID ReadOnlySharedMemoryBase;
PVOID ReadOnlySharedMemoryHeap;
PVOID* ReadOnlyStaticServerData;
PVOID AnsiCodePageData;
PVOID OemCodePageData;
PVOID UnicodeCaseTableData;
ULONG NumberOfProcessors;
ULONG NtGlobalFlag;
LARGE_INTEGER CriticalSectionTimeout;
SIZE_T HeapSegmentReserve;
SIZE_T HeapSegmentCommit;
SIZE_T HeapDeCommitTotalFreeThreshold;
SIZE_T HeapDeCommitFreeBlockThreshold;
ULONG NumberOfHeaps;
ULONG MaximumNumberOfHeaps;
PVOID* ProcessHeaps;
PVOID GdiSharedHandleTable;
PVOID ProcessStarterHelper;
ULONG GdiDCAttributeList;
PVOID LoaderLock;
ULONG OSMajorVersion;
ULONG OSMinorVersion;
USHORT OSBuildNumber;
USHORT OSCSDVersion;
ULONG OSPlatformId;
} PEB, * PPEB;
typedef struct _TEB {
NT_TIB NtTib;
PVOID EnvironmentPointer;
struct {
HANDLE UniqueProcess;
HANDLE UniqueThread;
} ClientId;
PVOID ActiveRpcHandle;
PVOID ThreadLocalStoragePointer;
PEB* ProcessEnvironmentBlock;
} TEB, * PTEB;
DWORD PASCAL GetVersionPEB(void)
{
DWORD dwVersion = 0;
TEB* lpTeb = NtCurrentTeb();
if (lpTeb != NULL)
{
PEB* lpPeb = lpTeb->ProcessEnvironmentBlock;
if (lpPeb != NULL)
{
DWORD dwMajVer = lpPeb->OSMajorVersion;
DWORD dwMinVer = lpPeb->OSMinorVersion;
dwVersion = (DWORD)MAKELONG(dwMinVer, dwMajVer);
}
}
return dwVersion;
}