Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Option Explicit
- ' version informations
- Private Type OSVERSIONINFOEX
- dwOSVersionInfoSize As Long
- dwMajorVersion As Long
- dwMinorVersion As Long
- dwBuildNumber As Long
- dwPlatformId As Long
- szCSDVersion As String * 128
- wServicePackMajor As Integer
- wServicePackMinor As Integer
- wSuiteMask As Integer
- wProductType As Byte
- wReserved As Byte
- End Type
- ' wide version for verify
- Private Type OSVERSIONINFOEXW
- dwOSVersionInfoSize As Long
- dwMajorVersion As Long
- dwMinorVersion As Long
- dwBuildNumber As Long
- dwPlatformId As Long
- szCSDVersion(128 * 2 - 1) As Byte
- wServicePackMajor As Integer
- wServicePackMinor As Integer
- wSuiteMask As Integer
- wProductType As Byte
- wReserved As Byte
- End Type
- ' comparison operators
- Private Const VER_EQUAL = &H1
- Private Const VER_GREATER = &H2
- Private Const VER_GREATER_EQUAL = &H3
- Private Const VER_LESS = &H4
- Private Const VER_LESS_EQUAL = &H5
- Private Const VER_AND = &H6
- Private Const VER_OR = &H7
- ' condition mask settings
- Private Const VER_CONDITION_MASK = &H7
- Private Const VER_NUM_BITS_PER_CONDITION_MASK = &H3
- ' comparison value flags
- Private Const VER_MINORVERSION = &H1
- Private Const VER_MAJORVERSION = &H2
- Private Const VER_BUILDNUMBER = &H4
- Private Const VER_PLATFORMID = &H8
- Private Const VER_SERVICEPACKMINOR = &H10
- Private Const VER_SERVICEPACKMAJOR = &H20
- Private Const VER_SUITENAME = &H40
- Private Const VER_PRODUCT_TYPE = &H80
- ' API
- Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As Any) As Long
- Private Declare Function RtlGetVersion Lib "ntdll" (ByRef lpVersionInformation As Any) As Long
- Private Declare Function VerSetConditionMask Lib "kernel32" (ByVal dwlConditionMask As Currency, ByVal dwTypeBitMask As Long, ByVal dwConditionMask As Byte) As Currency
- Private Declare Function VerifyVersionInfo Lib "kernel32" Alias "VerifyVersionInfoW" (ByRef lpVersionInfo As Any, ByVal dwTypeMask As Long, ByVal dwlConditionMask As Currency) As Long
- ' storage
- Private mOSV1 As OSVERSIONINFOEX
- Private mOSV2 As OSVERSIONINFOEX
- Private mRes1 As Long
- Private mRes2 As Long
- Private mVer1 As Boolean
- Private mVer2 As Boolean
- Sub Main()
- Dim sBuffer As String
- GatherVersionInfo
- sBuffer = "GetVersionEx: rc=" & mRes1 & " version=" & mOSV1.dwMajorVersion & "." & mOSV1.dwMinorVersion & " verify=" & mVer1 & vbCrLf & _
- "RtlGetVersion: rc=" & mRes2 & " version=" & mOSV2.dwMajorVersion & "." & mOSV2.dwMinorVersion & " verify=" & mVer2
- MsgBox sBuffer, vbOKOnly, "Version"
- End Sub
- Sub GatherVersionInfo()
- VersionEx
- If mRes1 = 0 Then
- mVer1 = VerifyVersion(mOSV1.dwMajorVersion, mOSV1.dwMinorVersion)
- End If
- RtlVersion
- If mRes2 = 0 Then
- mVer2 = VerifyVersion(mOSV2.dwMajorVersion, mOSV2.dwMinorVersion)
- End If
- End Sub
- Sub VersionEx()
- Dim lRet As Long
- mRes1 = 0
- mOSV1.dwOSVersionInfoSize = Len(mOSV1)
- lRet = GetVersionEx(mOSV1)
- If lRet = 0 Then
- mRes1 = Err.LastDllError
- End If
- End Sub
- Sub RtlVersion()
- mOSV2.dwOSVersionInfoSize = Len(mOSV2)
- mRes2 = RtlGetVersion(mOSV2)
- End Sub
- Function VerifyVersion(ByVal nMajor As Integer, ByVal nMinor As Integer) As Boolean
- Dim tOSV As OSVERSIONINFOEXW
- Dim dwlMask As Currency
- Dim dwFlags As Long, dwResult As Long
- With tOSV
- .dwOSVersionInfoSize = LenB(tOSV)
- .dwMajorVersion = nMajor
- .dwMinorVersion = nMinor
- End With
- dwlMask = VerSetConditionMask(dwlMask, VER_MAJORVERSION, VER_LESS_EQUAL)
- dwlMask = VerSetConditionMask(dwlMask, VER_MINORVERSION, VER_LESS_EQUAL)
- dwFlags = VER_MAJORVERSION Or VER_MINORVERSION
- dwResult = VerifyVersionInfo(tOSV, dwFlags, dwlMask)
- VerifyVersion = CBool(dwResult)
- End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement