Skip to content

Latest commit

 

History

History
76 lines (61 loc) · 2.18 KB

sample_023.md

File metadata and controls

76 lines (61 loc) · 2.18 KB

Home

Extended OS Version info

Before you begin:

See also:


Code:

*| typedef struct _OSVERSIONINFO{
*|   DWORD dwOSVersionInfoSize;  0 | 4
*|   DWORD dwMajorVersion;       4 | 4
*|   DWORD dwMinorVersion;       8 | 4
*|   DWORD dwBuildNumber;       12 | 4
*|   DWORD dwPlatformId;        16 | 4
*|   TCHAR szCSDVersion[ 128 ]; 20 | 128 = 148 bytes
*| } OSVERSIONINFO;

*| typedef struct _OSVERSIONINFOEX {
*|   DWORD dwOSVersionInfoSize;  0 | 4
*|   DWORD dwMajorVersion;       4 | 4
*|   DWORD dwMinorVersion;       8 | 4
*|   DWORD dwBuildNumber;       12 | 4
*|   DWORD dwPlatformId;        16 | 4
*|   TCHAR szCSDVersion[ 128 ]; 20 | 128
*|   WORD wServicePackMajor;   148 | 2
*|   WORD wServicePackMinor;   150 | 2
*|   WORD wSuiteMask;          152 | 2
*|   BYTE wProductType;        154 | 1
*|   BYTE wReserved;           155 | 1 = 156 bytes
*| } OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;

DECLARE INTEGER GetVersionEx IN kernel32;
    STRING @ lpVersionInformation

* set dwOSVersionInfoSize to 148 (OSVERSIONINFO)
* or 156 (OSVERSIONINFOEX) bytes
lcInfo = Chr(156) + REPLI (Chr(0), 300)  && some loose space

nResult = GetVersionEx (@lcInfo)

? "Major Version: ", buf2dword(SUBSTR(lcInfo,  5,4))
? "Minor Version: ", buf2dword(SUBSTR(lcInfo,  9,4))
? "Build Number:  ", buf2dword(SUBSTR(lcInfo, 13,4))
? "szCSDVersion:  ", "["+STRTRAN(SUBSTR(lcInfo, 21,128), Chr(0),"")+"]"
?
? "Major Service Pack: ", buf2word(SUBSTR(lcInfo,  149,2))
? "Minor Service Pack: ", buf2word(SUBSTR(lcInfo,  151,2))
? "Suite Bit Flags:    ", buf2word(SUBSTR(lcInfo,  153,2))
? "Product Type:       ", Asc(SUBSTR(lcInfo,155,1))
? "Reserved Byte:      ", Asc(SUBSTR(lcInfo,156,1))

FUNCTION  buf2dword (lcBuffer)
RETURN;
	Asc(SUBSTR(lcBuffer, 1,1)) + ;
	Asc(SUBSTR(lcBuffer, 2,1)) * 256 +;
	Asc(SUBSTR(lcBuffer, 3,1)) * 65536 +;
	Asc(SUBSTR(lcBuffer, 4,1)) * 16777216
ENDFUNC

FUNCTION  buf2word (lcBuffer)
RETURN;
	Asc(SUBSTR(lcBuffer, 1,1)) + ;
	Asc(SUBSTR(lcBuffer, 2,1)) * 256
ENDFUNC  

Listed functions:

GetVersionEx