VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "cOperSystem"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
' ***************************************************************************
'  Module:        clsOperSystem
'
'  Description:   Determines the operating system.  When this class is
'                 initialized, the GetWindowsVersion() routine is called.
'                 This will instantly set the flags to their appropriate
'                 value.  This module does not test with operating sytems
'                 earlier than Windows NT4.
'
'                 Identifying the current operating system is usually not
'                 the best way to determine whether a particular operating
'                 system feature is present. This is because the operating
'                 system may have had new features added in a redistributable
'                 DLL. Rather than using GetVersionEx to determine the
'                 operating system platform or version number, test for the
'                 presence of the feature itself.
'                 http://msdn.microsoft.com/en-us/library/ms724832(VS.85).aspx
'
' Important:      This module must have access to modTrimStr.bas
'
' -----------------------------------------------------------------------
' The base version information for various Windows versions is:
'
' Version                     Number  Major  Minor  Other info
' -----------------------------------------------------------------------
' Windows 8                    ?.?      ?      ?    Official release due in Fall of 2012
' Windows 7                    6.1      6      1    OSVERIONINFOEX.wProductType = VER_NT_WORKSTATION
' Windows Server 2008 R2       6.1      6      1    OSVERIONINFOEX.wProductType <> VER_NT_WORKSTATION
' Windows Server 2008          6.0      6      0    OSVERSIONINFOEX.wProductType <> VER_NT_WORKSTATION
' Windows Vista                6.0      6      0    OSVERSIONINFOEX.wProductType = VER_NT_WORKSTATION
' Windows Server 2003 R2       5.2      5      2    GetSystemMetrics(SM_SERVERR2) <> 0
' Windows Server 2003          5.2      5      2    GetSystemMetrics(SM_SERVERR2) = 0
' Windows Home Server          5.2      5      2    OSVERSIONINFOEX.wSuiteMask = VER_SUITE_WH_SERVER
' Windows XP Pro x64 Edition   5.2      5      2    (OSVERSIONINFOEX.wProductType = VER_NT_WORKSTATION) And
'                                                   (SYSTEM_INFO.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64)
' Windows XP                   5.1      5      1
' Windows 2000                 5.0      5      0
' Windows NT4                  4.0      4      0
' -----------------------------------------------------------------------
'
' Reference:   Randy Birch
'              GetVersionEx: Windows Version Info (Wrapper Routines)
'              http://vbnet.mvps.org/code/helpers/iswinversion.htm
'
'              Karl Perterson's Classic VB
'              http://www.mvps.org/vb/
'
'              GetVersionEx Function
'              http://msdn2.microsoft.com/en-us/library/ms724451(VS.85).aspx
'
'              Getting the System Version (Source code)
'              http://msdn2.microsoft.com/en-us/library/ms724429(VS.85).aspx
'
'              Operating System Version
'              http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832%28v=vs.85%29.aspx
'              
'              OSVersionInfoEx Structure
'              http://msdn2.microsoft.com/en-us/library/ms724833(VS.85).aspx
'
'              GetSystemMetrics Function
'              http://msdn2.microsoft.com/en-us/library/ms724385(VS.85).aspx
'
'              GetSystemInfo Function
'              http://msdn2.microsoft.com/en-us/library/ms724381(VS.85).aspx
'
'              GetProductInfo Function
'              http://msdn2.microsoft.com/en-us/library/ms724358.aspx
'
' Important:   Developers working in the Windows Vista environment should be
'              aware that if this code is run in the VB IDE and you are
'              notified that the operating system is other than Windows Vista,
'              do the following:
'
'              1.  Close the VB IDE (Visual BASIC Integrated Development Environment)
'              2.  Locate the file VB.EXE
'              3.  Right mouse click and select Properties >> Compatibility tab
'              4.  Remove any checkmarks and close the window
'              5.  Restart the VB IDE
'
'  -----------------------------------------------------------------------
'
'  Example:    Set objOS = new cOperSystem  ' Instantiate class object
'
'              ' Is this Windows XP?
'              If objOS.bWinXP then
'                  Msgbox objOS.VersionName & vbNewLine & _
'                          "Version " & objOS.VersionNumber & " " & _
'                          objOS.ServicePack
'              Else
'                  Msgbox "This is not Windows XP"
'              End If
'
'              Set objOS = Nothing  ' Free class object from memory
'
' ===========================================================================
'    DATE      NAME / eMAIL
'              DESCRIPTION
' -----------  --------------------------------------------------------------
' 15-Oct-2006  Kenneth Ives  kenaso@tx.rr.com
'              Converted to a class, renamed some of the variables,
'              Combined some of the routines for speed.  When this class is
'              initialized, the GetWindowsVersion() routine is called.  This
'              will instantly set the flags to their appropriate value.
' 16-Jan-2008  Kenneth Ives  kenaso@tx.rr.com
'              Dropped support for any operating systems earlier than Windows
'              NT4 Servers and Windows 2000.
' 17-Apr-2008  Kenneth Ives  kenaso@tx.rr.com
'              Updated for additional Windows Vista versions.
'              Updated 64-bit testing routines.
' 30-Jul-2008  Kenneth Ives  kenaso@tx.rr.com
'              Updated for Windows 2000 Data Center Server
' 20-Aug-2008  Kenneth Ives  kenaso@tx.rr.com
'              Updated testing logic for enhanced systems
' 04-May-2009  Kenneth Ives  kenaso@tx.rr.com
'              Rewrote module.
'              Added testing for additional Windows operating systems.
' 05-Sep-2009  Kenneth Ives  kenaso@tx.rr.com
'              Thanks to Maria AAM for pointing out that I needed to add an
'              additional property named bOperSystem64() denoting a 64-bit
'              operating system in general
' 20-Jul-2011  Kenneth Ives  kenaso@tx.rr.com
'              - Updated logic in TestForOldestVersion() routine
'              - Added property bWinXPSP3() for Windows XP Service Pack 3
'              - Updated IsWinXP() routine
'              - Updated TestForOtherServers() routine
' 26-Mar-2012  Kenneth Ives  kenaso@tx.rr.com
'              - Deleted RemoveTrailingNulls() routine from this module. 
'              - Changed call to RemoveTrailingNulls() to TrimStr module 
'                due to speed and accuracy.
'              - Updated TestForOldestVersion() routine logic.
' ***************************************************************************
Option Explicit

' ***************************************************************************
' Constants
' ***************************************************************************
  ' used by OSVERSIONINFOEX.PlatformID
  Private Const VER_PLATFORM_WIN32_NT                As Long = 2

  ' used by OSVERSIONINFOEX.wProductType
  Private Const VER_NT_WORKSTATION                   As Long = &H1     ' Windows Vista, XP Pro, XP Home Edition, or 2000 Pro
  Private Const VER_NT_DOMAIN_CONTROLLER             As Long = &H2     ' Windows Server 2008, Windows Server 2003, or Windows 2000 Server
  Private Const VER_NT_SERVER                        As Long = &H3     ' Windows Server 2008, Windows Server 2003, or Windows 2000 Server

  ' used by OSVERSIONINFOEX.wSuiteMask
  Private Const VER_SUITE_SMALLBUSINESS              As Long = &H1     ' Microsoft Small Business Server w        As once installed on the system, but may have been upgraded to another version of Windows
  Private Const VER_SUITE_ENTERPRISE                 As Long = &H2     ' Windows Server 2008 Enterprise, Windows Server 2003, Enterprise Edition, or Windows 2000 Advanced Server is installed
  Private Const VER_SUITE_BACKOFFICE                 As Long = &H4     ' Windows backoffice suite
  Private Const VER_SUITE_TERMINAL                   As Long = &H10    ' Terminal Services is installed
  Private Const VER_SUITE_EMBEDDEDNT                 As Long = &H40    ' Windows XP Embedded is installed
  Private Const VER_SUITE_DATACENTER                 As Long = &H80    ' Windows Server 2008 Datacenter, Windows Server 2003, Datacenter Edition, or Windows 2000 Datacenter Server is installed
  Private Const VER_SUITE_PERSONAL                   As Long = &H200   ' Windows Vista Home Premium, Windows Vista Home Basic, or Windows XP Home Edition is installed
  Private Const VER_SUITE_BLADE                      As Long = &H400   ' Windows Server 2003, Web Edition is installed
  Private Const VER_SUITE_STORAGE_SERVER             As Long = &H2000  ' Windows Storage Server 2003 R2 or Windows Storage Server 2003 is installed
  Private Const VER_SUITE_COMPUTE_SERVER             As Long = &H4000  ' Windows Server 2003, Compute Cluster Edition is installed
  Private Const VER_SUITE_WH_SERVER                  As Long = &H8000  ' Windows home server is installed
  Private Const VER_SUITE_SMALLBUSINESS_RESTRICTED   As Long = &H20    ' Microsoft Small Business Server is installed with the restrictive client license in force

  Private Const SM_TABLETPC                          As Long = 86
  Private Const SM_MEDIACENTER                       As Long = 87
  Private Const SM_STARTER                           As Long = 88
  Private Const SM_SERVERR2                          As Long = 89

  Private Const PROCESSOR_ARCHITECTURE_INTEL         As Long = 0       ' 32-bit
  Private Const PROCESSOR_ARCHITECTURE_IA64          As Long = 6       ' 64-bit
  Private Const PROCESSOR_ARCHITECTURE_AMD64         As Long = 9       ' 64-bit

  ' GetProductInfo possible values
  Private Const PRODUCT_ULTIMATE                     As Long = &H1     ' Ultimate Edition
  Private Const PRODUCT_HOME_BASIC                   As Long = &H2     ' Home Basic Edition
  Private Const PRODUCT_HOME_PREMIUM                 As Long = &H3     ' Home Premium Edition
  Private Const PRODUCT_ENTERPRISE                   As Long = &H4     ' Enterprise Edition
  Private Const PRODUCT_HOME_BASIC_N                 As Long = &H5     ' Home Basic Edition
  Private Const PRODUCT_BUSINESS                     As Long = &H6     ' Business Edition
  Private Const PRODUCT_STANDARD_SERVER              As Long = &H7     ' Server Standard Edition (full installation)
  Private Const PRODUCT_DATACENTER_SERVER            As Long = &H8     ' Server Datacenter Edition (full installation)
  Private Const PRODUCT_SMALLBUSINESS_SERVER         As Long = &H9     ' Small Business Server
  Private Const PRODUCT_ENTERPRISE_SERVER            As Long = &HA     ' Server Enterprise Edition (full installation)
  Private Const PRODUCT_STARTER                      As Long = &HB     ' Starter Edition
  Private Const PRODUCT_DATACENTER_SERVER_CORE       As Long = &HC     ' Server Datacenter Edition (core installation)
  Private Const PRODUCT_STANDARD_SERVER_CORE         As Long = &HD     ' Server Standard Edition (core installation)
  Private Const PRODUCT_ENTERPRISE_SERVER_CORE       As Long = &HE     ' Server Enterprise Edition (core installation)
  Private Const PRODUCT_ENTERPRISE_SERVER_IA64       As Long = &HF     ' Server Enterprise Edition for Itanium-based Systems
  Private Const PRODUCT_BUSINESS_N                   As Long = &H10    ' Business Edition
  Private Const PRODUCT_WEB_SERVER                   As Long = &H11    ' Web Server Edition (full installation)
  Private Const PRODUCT_CLUSTER_SERVER               As Long = &H12    ' Cluster Server Edition
  Private Const PRODUCT_HOME_SERVER                  As Long = &H13    ' Home Server Edition
  Private Const PRODUCT_SMALLBUSINESS_SERVER_PREMIUM As Long = &H19    ' Small Business Server Premium Edition
  Private Const PRODUCT_HOME_PREMIUM_N               As Long = &H1A    ' Home Premium Edition
  Private Const PRODUCT_ENTERPRISE_N                 As Long = &H1B    ' Enterprise Edition
  Private Const PRODUCT_ULTIMATE_N                   As Long = &H1C    ' Ultimate Edition
   
' ***************************************************************************
' Type structures
' ***************************************************************************
  ' The OSVERSIONINFOEX data structure contains operating system version
  ' information. The information includes major and minor version numbers,
  ' a build number, a platform identifier, and information about product
  ' suites and the latest Service Pack installed on the system. This structure
  ' is used with the GetVersionEx and VerifyVersionInfo functions.
  Private Type OSVERSIONINFOEX
      OSVSize           As Long          ' size of this data structure (in bytes)
      dwVerMajor        As Long          ' ex: 5
      dwVerMinor        As Long          ' ex: 01
      dwBuildNumber     As Long          ' ex: 2600
      PlatformID        As Long          ' Identifies operating system platform
      szCSDVersion      As String * 128  ' ex: "Service Pack 3"
      wServicePackMajor As Integer
      wServicePackMinor As Integer
      wSuiteMask        As Integer
      wProductType      As Byte
      wReserved         As Byte
  End Type

  ' The SYSTEM_INFO structure contains information about the current computer
  ' system.  This includes the architecture and type of the processor, the
  ' number of processors in the system, the page size, and other such information.
  Private Type OEM_ID
      wProcessorArchitecture As Integer
      wReserved              As Integer
  End Type
  
  Private Type SYSTEM_INFO
      dwOemID                     As OEM_ID
      dwPageSize                  As Long
      lpMinimumApplicationAddress As Long
      lpMaximumApplicationAddress As Long
      dwActiveProcessorMask       As Long
      dwNumberOfProcessors        As Long
      dwProcessorType             As Long
      dwAllocationGranularity     As Long
      wProcessorLevel             As Integer
      wProcessorRevision          As Integer
  End Type

  ' Windows operating system formatted information
  Private Type OS_INFORMATION
      PlatformID   As Long
      VersionName  As String
      VersionNo    As String
      BuildNo      As String
      ServicePack  As String
  End Type

' ***************************************************************************
' API Declares
' ***************************************************************************
  ' This function obtains extended information about the version of the
  ' operating system that is currently running.
  Private Declare Function GetSystemMetrics Lib "user32" _
          (ByVal nIndex As Long) As Long

  ' This function obtains extended information about the version of the
  ' operating system that is currently running.  If the function succeeds,
  ' the return value is a nonzero value.
  Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
          (LpVersionInformation As Any) As Long

  ' The GetProcAddress function returns the address of the specified
  ' exported dynamic-link library (DLL) function. If the function call fails,
  ' the return value is null.
  Private Declare Function GetProcAddress Lib "kernel32" _
          (ByVal hModule As Long, ByVal lpProcName As String) As Long

  ' Retrieves a module handle for the specified module. The module must have
  ' been loaded by the calling process.
  Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" _
         (ByVal lpModuleName As String) As Long
  
  ' This function returns information about the current system.
  Private Declare Sub GetSystemInfo Lib "kernel32" _
          (lpSystemInfo As SYSTEM_INFO)
  
  ' Retrieves information about the current system running Windows 2000 Pro or
  ' newer.  It is equivalent to the GetSystemInfo function.
  Private Declare Sub GetNativeSystemInfo Lib "kernel32" _
          (lpSystemInfo As SYSTEM_INFO)

  ' Retrieves the product type for the operating system on the local
  ' computer, and maps the type to the product types supported by the
  ' specified operating system.
  Private Declare Function GetProductInfo Lib "kernel32" _
          (ByVal dwOSMajorVersion As Long, ByVal dwOSMinorVersion As Long, _
          ByVal dwSpMajorVersion As Long, ByVal dwSpMinorVersion As Long, _
          pdwReturnedProductType As Long) As Long

  ' ZeroMemory is used for clearing the contents of a type structure.
  Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" _
          (Destination As Any, ByVal Length As Long)

' ***************************************************************************
' Module Variables
'
'                    +-------------- Module level designator
'                    |  +----------- Data type (Boolean)
'                    |  |     |----- Variable subname
'                    - --- ---------
' Naming standard:   m bln WindowsNT
' Variable name:     mblnWindowsNT
'
' ***************************************************************************
  Private mtypOSInfo                        As OS_INFORMATION
  Private mtypOSVIEX                        As OSVERSIONINFOEX
  Private mtypSI                            As SYSTEM_INFO
  Private mstrVerName                       As String
  Private mstrSrvPack                       As String
  
  Private mblnWindowsNT                     As Boolean
  Private mblnWinNT4orNewer                 As Boolean
  Private mblnWin2000orNewer                As Boolean
  Private mblnWinXPorNewer                  As Boolean
  Private mblnWinVistaOrNewer               As Boolean
  
  Private mblnWin2000                       As Boolean
  Private mblnWin2000Pro                    As Boolean
  Private mblnWin2000Workstation            As Boolean
  Private mblnWin2000Server                 As Boolean
  Private mblnWin2000DatacenterSvr          As Boolean
  Private mblnWin2000AdvancedSvr            As Boolean
  
  Private mblnWinXP                         As Boolean
  Private mblnWinXPSP2                      As Boolean
  Private mblnWinXPSP3                      As Boolean
  Private mblnWinXPHomeEdition              As Boolean
  Private mblnWinXPPro                      As Boolean
  Private mblnWinXPMediaCenter              As Boolean
  Private mblnWinXPStarter                  As Boolean
  Private mblnWinXPTabletPC                 As Boolean
  Private mblnWinXPEmbedded                 As Boolean
  
  Private mblnWinVista                      As Boolean
  Private mblnWinVistaSP1                   As Boolean
  Private mblnWinVistaHomeBasic             As Boolean
  Private mblnWinVistaHomeEdition           As Boolean
  Private mblnWinVistaHomePremium           As Boolean
  Private mblnWinVistaHomeServer            As Boolean
  Private mblnWinVistaUltimate              As Boolean
  Private mblnWinVistaBusiness              As Boolean
  Private mblnWinVistaEnterprise            As Boolean
  Private mblnWinVistaWorkstation           As Boolean
  Private mblnWinVistaStarter               As Boolean
  Private mblnWindows7                      As Boolean
  
  Private mblnWinServer2003                 As Boolean
  Private mblnWin2003ServerR2               As Boolean
  Private mblnWin2003StorageServer          As Boolean
  Private mblnBladeServer                   As Boolean
  Private mblnWebServer                     As Boolean
  Private mblnWinHomeServer                 As Boolean
  Private mblnClusterServer                 As Boolean
  Private mblnComputeClusterServer          As Boolean
  Private mblnWinServer2008                 As Boolean
  Private mblnWinServer2008R2               As Boolean
  Private mblnDataCenterServer              As Boolean
  Private mblnDataCenterServerCore          As Boolean
  
  Private mblnBackOfficeServer              As Boolean
  Private mblnDomainController              As Boolean
  Private mblnEnterpriseServer              As Boolean
  Private mblnEnterpriseServerCore          As Boolean
  Private mblnTerminalServer                As Boolean
  Private mblnSmallBusinessServer           As Boolean
  Private mblnSmallBusinessServerPremium    As Boolean
  Private mblnSmallBusinessRestrictedServer As Boolean
  Private mblnStandardServer                As Boolean
  Private mblnStandardServerCore            As Boolean
  
  ' 64-Bit Versions
  Private mblnWinVista64                    As Boolean
  Private mblnWinXPPro64                    As Boolean
  Private mblnDataCenterItanium64           As Boolean
  Private mblnEnterpriseItanium64           As Boolean
  Private mblnDataCenter64                  As Boolean
  Private mblnEnterprise64                  As Boolean
  Private mblnStandard64                    As Boolean
  Private mblnComputeServer64               As Boolean
  Private mblnDatacenterServer64            As Boolean
  Private mblnEnterpriseServer64            As Boolean
  Private mblnWebBladeServer64              As Boolean
  Private mblnStandardServer64              As Boolean
  Private mblnOperSystem64                  As Boolean


' ***************************************************************************
' ****                      Properties                                   ****
' ***************************************************************************

Public Property Get VersionName() As String
    VersionName = mtypOSInfo.VersionName
End Property

Public Property Get VersionNumber() As String
    VersionNumber = mtypOSInfo.VersionNo
End Property

Public Property Get BuildNumber() As String
    BuildNumber = mtypOSInfo.BuildNo
End Property

Public Property Get VersionData() As String

    With mtypOSInfo
        VersionData = .VersionName & " " & _
                      .VersionNo & "." & _
                      .BuildNo
    End With
    
    If mblnWinNT4orNewer Then
        VersionData = VersionData & " " & ServicePack
    End If

End Property

Public Property Get ServicePack() As String
    ServicePack = mtypOSInfo.ServicePack
End Property

Public Property Get PlatformID() As Long
    PlatformID = mtypOSInfo.PlatformID
End Property

Public Property Get bWindowsNT() As Boolean
    bWindowsNT = mblnWindowsNT
End Property

Public Property Get bWinNT4orNewer() As Boolean
    bWinNT4orNewer = mblnWinNT4orNewer
End Property

Public Property Get bWin2000() As Boolean
    bWin2000 = mblnWin2000
End Property

Public Property Get bWin2000Pro() As Boolean
    bWin2000Pro = mblnWin2000Pro
End Property

Public Property Get bWin2000Workstation() As Boolean
    bWin2000Workstation = mblnWin2000Workstation
End Property

Public Property Get bWin2000Server() As Boolean
    bWin2000Server = mblnWin2000Server
End Property

Public Property Get bWin2000DatacenterSvr() As Boolean
    bWin2000DatacenterSvr = mblnWin2000DatacenterSvr
End Property

Public Property Get bWin2000AdvancedSvr() As Boolean
    bWin2000AdvancedSvr = mblnWin2000AdvancedSvr
End Property

Public Property Get bWin2000orNewer() As Boolean
    bWin2000orNewer = mblnWin2000orNewer
End Property

Public Property Get bWinXP() As Boolean
    bWinXP = mblnWinXP
End Property

Public Property Get bWinXPSP2() As Boolean
    bWinXPSP2 = mblnWinXPSP2
End Property

Public Property Get bWinXPSP3() As Boolean
    bWinXPSP3 = mblnWinXPSP3
End Property

Public Property Get bWinXPHomeEdition() As Boolean
    bWinXPHomeEdition = mblnWinXPHomeEdition
End Property

Public Property Get bWinXPProfessional() As Boolean
    bWinXPProfessional = mblnWinXPPro
End Property

Public Property Get bWinXPMediaCenter() As Boolean
    bWinXPMediaCenter = mblnWinXPMediaCenter
End Property

Public Property Get bWinXPStarter() As Boolean
    bWinXPStarter = mblnWinXPStarter
End Property

Public Property Get bWinXPTabletPC() As Boolean
    bWinXPTabletPC = mblnWinXPTabletPC
End Property

Public Property Get bWinXPEmbedded() As Boolean
    bWinXPEmbedded = mblnWinXPEmbedded
End Property

Public Property Get bWinXPorNewer() As Boolean
    bWinXPorNewer = mblnWinXPorNewer
End Property

Public Property Get bWindows7() As Boolean
    bWindows7 = mblnWindows7
End Property

Public Property Get bWinVistaStarter() As Boolean
    bWinVistaStarter = mblnWinVistaStarter
End Property

Public Property Get bWinServer2003() As Boolean
    bWinServer2003 = mblnWinServer2003
End Property

Public Property Get bWin2003ServerR2() As Boolean
    bWin2003ServerR2 = mblnWin2003ServerR2
End Property

Public Property Get bWin2003StorageServer() As Boolean
    bWin2003StorageServer = mblnWin2003StorageServer
End Property

Public Property Get bComputeClusterServer() As Boolean
    bComputeClusterServer = mblnComputeClusterServer
End Property

Public Property Get bWinVista() As Boolean
    bWinVista = mblnWinVista
End Property

Public Property Get bWinVistaSP1() As Boolean
    bWinVistaSP1 = mblnWinVistaSP1
End Property

Public Property Get bWinVistaHomeBasic() As Boolean
    bWinVistaHomeBasic = mblnWinVistaHomeBasic
End Property

Public Property Get bWinVistaHomeEdition() As Boolean
    bWinVistaHomeEdition = mblnWinVistaHomeEdition
End Property

Public Property Get bWinVistaHomePremium() As Boolean
    bWinVistaHomePremium = mblnWinVistaHomePremium
End Property

Public Property Get bWinVistaHomeServer() As Boolean
    bWinVistaHomeServer = mblnWinVistaHomeServer
End Property

Public Property Get bWinVistaUltimate() As Boolean
    bWinVistaUltimate = mblnWinVistaUltimate
End Property

Public Property Get bWinVistaBusiness() As Boolean
    bWinVistaBusiness = mblnWinVistaBusiness
End Property

Public Property Get bWinVistaEnterprise() As Boolean
    bWinVistaEnterprise = mblnWinVistaEnterprise
End Property

Public Property Get bWinVistaWorkstation() As Boolean
    bWinVistaWorkstation = mblnWinVistaWorkstation
End Property

Public Property Get bWinServer2008() As Boolean
    bWinServer2008 = mblnWinServer2008
End Property

Public Property Get bWinServer2008R2() As Boolean
    bWinServer2008R2 = mblnWinServer2008R2
End Property

Public Property Get bWinVistaOrNewer() As Boolean
    bWinVistaOrNewer = mblnWinVistaOrNewer
End Property

Public Property Get bDataCenterServer() As Boolean
    bDataCenterServer = mblnDataCenterServer
End Property

Public Property Get bDataCenterServerCore() As Boolean
    bDataCenterServerCore = mblnDataCenterServerCore
End Property

Public Property Get bBackOfficeServer() As Boolean
    bBackOfficeServer = mblnBackOfficeServer
End Property

Public Property Get bBladeServer() As Boolean
    bBladeServer = mblnBladeServer
End Property

Public Property Get bWebServer() As Boolean
    bWebServer = mblnWebServer
End Property

Public Property Get bWinHomeServer() As Boolean
    bWinHomeServer = mblnWinHomeServer
End Property

Public Property Get bewer() As Boolean
    bWinXPorNewrMnNdEnd2     bewer() As timate = mblnWinVistaUltimar
End Property

Public Prop             h5oVis7Business
nd Property

Public Property Get bewer(inHrServe As Boolean
  mbedded
End Propertyf   bWinVooleaoroperty Get bWieiPMrsllean
    bWinHomeServer = mblnWinHo

PTm
End Property

PuEnd Property
eaoroperr This              As Boolea
Public Property Get bWinVistaOrNewer() As As Boolean
  c Property Geb          As Bolic Prop         h5oVis7Buay Ginor As Integeeb   cblic Propert2End PistaUltimar
cl1nVistaHomeEdition = mblnWinVistaHomeEdition
End Property

Public Property Gett bWin20skEic Propert erty

Public Property Get bWinVistairEeic Property Get bNoperty Get bWinVista c Property rty oert   bWinServer2008:ServladeServer eIaeNublilneBusienmerCore            taHomeEdition
En*******************lneBusienmer        serty

Public Property Get bBladeServeProperty

Public Propen8o rw = mblnD****d1

Publioolean
    bBladeinalServer      nd PoWinHo

Pan
    nWinVistaWorkstation
Enelic Property Get bBladeServe   nnpaVis
Enelic Bladein oolean
   ex: "Sate = mblnWinVistaUltier() As Boolean
  Fperty o"Satpey

Public Property Gdty

Pud ProUc
nd PPPPPPPPPPPPPPP,y o"Satbic Pd Pry

Pud ProU ProUc
nd PP08R2 = mblnWinServer2008R2
End Property

Public
Pud PrPPPPPPPP,y o"Satbic Pd Pry

Pud ProU ProUc
nd PP08R2 = mv***A      As Boolean
ty

PubliCinVistaUltier() As Boolean
  Fperty o"Satpey

P_
Pu  pdwDt4istaWorkstation
Enelii08R2(on Getusicl2iAs Boolean
  Private      nd PoWinHo

Pan
    nWinVistaWorkstation
EGet bBlstation
ERnation
Enelii08R2(on Getusicl2iAs Bperty Gett bWin20skElusterServer
End POrNe3ADinVistaWon
EGet bB

PNmi
Enelii08R2(on Getusicl2iAs BpVistaWlcTstaIT5lsiness()DEnelsiPt bProperty

Public PrpPOr..irNe3ADinVistaWrope uPP08R2(on Getusoperty

PuBua::::sRta        ProUc
nd PP08R2 =uso
Publioolean
    bBladeinalServer      nd PoWinHo

Pan
NAs B_licSlea 5 Property

o6xxxxoDi08erty

erServeISiexP08kc22CVSlea 5 Property

o6xxxxoDisubndeServerwNnterServer
End Property

Public ProperMoxmy o"Satbic Pd Pry

PoDi08erty

e  bBladeinalServer      nd PoWinHo

Pan
NAs B_
PoDi08eemy o"Sb       xmy o"Ssicligi3rServe3fsOCtion
End Property

Pan
NAsnd PS PoW

PuBua:sfba  As BooleaAAAA3fsO
Enn
NA  nd PoWinHo

Pan
    nWinVist

ry

PoDi08erty2a:sfba  As BooleaAAAA3fsO
Enn
NA  nd PoWa  As BooleaAAAA3fsO
Enn
NA  nd PoWinHo

Pan
    nWinVist

ry

PoDi e kewer    ss BoDn

Public
Pud PrPPPPPPPP,yRy

PoDi e kewer    ss BoDn

Publicivate Co
  1 BoDn

Public PropS
perty EORy
o

PalnWii08erty2a:sfba  As BoomblnWinNT4or5555555Ow aring the c
PoDi eDaOcklatfoomblnWinNT4or5555555Ow ariblnEnterprisaicSl 4or opertU/tVWin2Na:s(As BoomblnWinNT4or5555555Ow aring the c
PoDi eDaOcklaise64         o:,otatio
Public
Pud DaOcklaise64  

e  bBltrAs BoomblnWinNT4or5555555Ow ary.com
'          ed PoWinHo

reDaOtR/inVi-Ene uPP0BowPise6   bn
    nWinVistaWorkstation
EGet bBlstation
ERnation
Enelii08R2(on Getusicl2iAs Bperty Gett bWin2Boom        As Lonedded = mblnWinXPE:,otatio
Public
Pud DaOcklaise64  

e a3in2Bd bBladeinalServer      nd PoWinHo

***********************7 mbl08R2 =uso
Publioo cklati3rSellnEAd DaOck******************aringrveWinHte mblnWebBladeSe****0Eterpriser******aringrveWinHte-Al08R Boolean
() Asck********l2iAs BpVistaWlcTstaIT5lsiness()DEnelsiPt bPropernbl08R2 =uso
Publioo c ation As Any) As Long

  ' The GetProcAddress function returnn2itaCenterServerCore() As Boolean
    bDataCentDn

Public
Pud PeitaCenterSD*****************
' ****        aCenterSD***rty Get bWin20    unction return  D.E  bDatk********l2iAs BpVertyblnWinHomeServer
End Prob@ivate mblnSm2I8R2 =uso
Publioo
Publioo
P5AOSi operno

**
uSm2I8R blioo
Publioo
P5AOSi operno
blnWinc permsgd2Bd bB4*
' ****        aCe  Action. If the function ca  A If i*
uSm2I
End Prroperty Get LEnd Prroperty Get LEnAction. If the fubnd PrrnWinHo

Pan
    nWinVistacrty Get LEnAction. If throperty

    nWinVistac As Boolea************** n
lnDataCenterItanium64           As Boolean
  Pri2lic PropS
perty EORy
o

PalnWii0P          As Boolean
  Pri2lic PrGet LEnAction. If thBlsLoNdoty

Public P
Pud DaOcklaR6                mHo

****bDatk********aOckkCenterServer npS
lea
Pu        permTstaIT5loWinHo

Pan
    nWinVist

ry

PoDi08erty2nBackOfficeSec.f i*
uSrItanium64           As Boolean
  Pri2lic PropS
pring the c
PoDi eniumnalSebemDt6         atk****osS
pring lic P56e

. ProbFfM>RC3
End PropervvtaCFaeW
PnVihnNT4or55s5ropS

pring the c
PoDi eniumnj(NWc P56e
      ***aringrveWinHte-Al.hTS6         atk****osS
pring lic PclatfoSInfo.PlatformID
End ProeuP1
End Property
lOlatfoSInfo.PlatfoDi CenterServere
End Property

Public Property Ge:ETrPud PrPPPPPPPP,yRyer   1
End PropeY>c(n Property Ge:ETrPk****AAs P,yeY>c(n Prop   atk**ic Property G unction r2WinServer2008RProb@ivate t5**ic Property G unction r2WinServe
EpRfoeAs P,yeY>c(n Prop   atk**ic Property G unction r2WinServerc(n Prop   atk**ic Property G unction r2WinServerc(n Prop t Prop   atk**ic Propatfc unctty2niumnj(NWc P56e
  PrRleaAAAAberverc(n Prop   aN*
' ****************************************6oultk**ic PropayEmaNerty Gett bWin20skS iPudrng late t5**ic PropertfoDi CenterServere
End Prop2En = mblnWinVistaHomeEd bWinXPorNewrMnNdEnd2     bewer() As timate = mblnWinVistaUltimar
End Property

diRNA  nd PoWa  As Longop   atcSSB   cNA  nd PoU P,yeY>c(n Prop lic Propef0***R i As Boombln8

PublicgandardServerlic PclatfoSInfo.PlatformIDPPP,y ervetfyI-PVist     bewer() As timate = mblnWinVistaUltimar
EninVistaUltimar
EninVistaUltimarsc***PropSerpmar
S   cmar
EninVistaUltimar
pring Ultimarsc***PristaUlMosS
BoomblnWinNT4or5osS
BoomblnWicPristaUlnSeaUlMcT4or5osS
BoomblnWic"oo.Pl**ic Property G unction r        permTstSet bWinXPHomeEditionaUlg UltimoeAs P,yeY>c(n PrBoomblnWinNT4or5oAatfc unctty2niumnj(NWc 56e
      ***aringl mv**************** n
lnDataCenterItanium64    s3 s3 s3 s3 s3 s3 s3blnWinVistaHomeServer
End Property
toDi e kewer    ss U3lean
    bWnd ProperDataCenterItanNtformID = mtypOSInfo.PlatformID
End atalled
  Private Const VER_SUITE_EMBEDDEr
**** n
lnDaatforerDataCe**** erty

PrtfoinVistc, t
***IDDEr
**** n
lnDaatforerDataCe**** erty

PrtfoinVistcbuMDDEs timate = mblnWinViIaCe**** erty

PrtfoinVie4lnWinViIaCe**** erty

PrtfoinVie4lnWinViIaCe***ic Property G unction r2WinSelEr
**** n
lnDaatforerDataCe**** erty

PrSGet rDnEr
**** n
   ********6B"oert  n n
   ****************************Yrop_PdNo
End Propertyf8g

P.9***6*****EEEEM
PrtfoinVie4lnWinViIaCeet a***- rPrSGet rDnEIaCeet a***- rV**** e***PropSerpmar
S   t bB

PEeiiiiiii2P dS..9***6**c pety oert   bWinServer2008:ServladeServer eItoDi e kewer    ss U3lean
    bWnd Prop0e
End Property

Public Property Ge:ETrPud PrPPPPPPPP,yRyer   1
End Pro Bool      blnck   p2P dS..9*roperty GenVie4lnWinViIaCe***ic Property G unc p2P dd Propervvtnc
PoDPPPP,yRyer   1
aOckL4blico t bB

PEeiiiiiii2P Ag bB

PEeiiiWorkoperv(Re Ge:ETrPud PrPPPa)**6B"o Geta ***aringl mv***i e kewCroEropervvts
End PrETrPud lbWiiiiPubl
Neweing the c
WinVtfoinVistc, t
***IDDEr
*4nterServerCoy Ge:ETrPmL**A vtso GeopervvtDMop6***************************6oultke** erty

PrtfoinVn3ropervvtaCFaeW
PnVihnNT4or55s5ropS

pring the n      As Stringgistc, t
***IDDEr
*4nter:3e kewertion/vetf
Public nWinVistaUlItanium64           As BooSc(n          ertyoperty .nteoperty GenVie4t, (SM Private Const VER_SUIie4lNOeaGetver eItoDaatforepItanium64   c nrtyer Ed atalled
  P-e

  ' This function obic Property GorepItanium64   c nrtyata

PiVOOOOTH****T4or55s5ropS     ium64 MertneropS

pring the n      2pS

prin  c nrtyata

PiV2rnter:3e kewertionNlean
 roper    2pSXPMeft a***- rV**** e***As Boype to the product types supported by the
  '() As Boolean
    bBladcSl Ed aeW
PnVihnNT4or55s5ropS

prtUITcgMop6niul Ed aeW
PnVihnNTIperty= mblnWinServer2008
End PropleRTIperng late t5*RnNTIperty= mblnWinblivB(
End    m**As Boype to the aaelItS oert   bWinServer2008s   (ByVrepItanium6erty GorItS oert   bWinSe+**ic Property G unction r2WinServe
EpRfoeAs WinServertcgMop6niul Ed alg laon r2WinSe5555Ow ary.com
VistaU 8R2 = mvplea
PuvaGet
Prtfoin= mblnWind POrNe3Ahsver eItoDaatforepItani>SInfo.PlatformID
End ProeuP1
End Property
lOblnWi6z2 = mvplea
PuvaGet
Ml
Prtfoiry.com** n
lnDaatforerDataCe**** erty

Prn_aet
Ml
PrtfoirSAhsver eItlnDaatforerDataC/a9Vn3ropeMerty= mblnWinblivB(
End    m**As Bo5m64   c 2003SerbemDtMl
Pr/+woperty
lOblnW   m**As Bo5m64   c 200   c nrtyervaGet
Prmar
EninVistarg ***arintion  foet bB5e(nty

PrtfoinVie4rty
lOblnW   m**As Bo5m64   c 200   c nrtyerSyerv_iVOOOOTH****T4Id)neropS

pringIArlI
    bWinV
**** n
lnDaatforepIDrrty
lOblnW   m**As Bo5m64   c 20  1 BoDn

Public PropS
pertyfore64 Id)ipert2End PistaUltiNT4or554   c 20  1 BoDn

.Enterprise
End PrVist

ry

PoDi08erty2a:sfba  As BooleaAAAA3fsO
EnnUltiNT4or554   c 20  1 Bblic Property Get ladeServer eItoDi e kepeca c PropTWinViIaCe***ty Get ladeServer eItod r2WinSe5555Ow  lat2End er
r Ed atac6RdServer eItoDi e kepeca c ProinViRKu timate = mblnWinnthe product t**ID_MSItyervNln ProinViRpee
End PrVist

ry

PoElt bB5e(nttttnnertion/vetf
Public /vetf
Public /vetf
Pubr2WinSe5WinSe5WinSe5WinSe5WinSe5WinSe5WinSe5WinSe5WinSe5      As Boolean
  Pri2lic NeServezUltimate
VistaUltimar
EninVist
  PnViDCeet a***- rV**** e*PPPPONINFOEX data structure contateroperty

Public Property Get bWin2000AdvancedSvriIaCe***ty  Prop lIBladcSl Ed aeW
PnVihnNT4or55crveWvu*- rV**** e***PropSebe aeW
PnAdvancedSvriIa7Cdt(Jn NeServezUlNeweidlObnVihnNTN*ilIBladcSV****GI
PnVihnNT4or55crveWvWin2SK4nbe aeW
PnAdvancedIvan***T4Id)mdU_rWinViIaCe***ty Get lOsan r  2r = mblnWin200_ pr*ilIBladcSV** a_ewertion/NT4or55crveWvWin2Szn200_ pr*ilIBladcSV** a_ey Geet lOsan r  2r = mblnWin200_N pr*ilIBe aeimaidvancedkepeca c Proiy

wertlan*ESfoinViR_SUITE_EMBEDDEr
*OebBl2 nVis8pr*ilIBate()werate
VistacCdstructure contateroperty

Public Propervancedkepeca c E 5soinVi
o6xxebBl2 nVis8p.mEn20tdfoirSAhsver eItlnDaatforerDataC/a9Vn3roiy

wertlanPEever eItl
Publicl Bblic Property Get ladepTrPk* sO
EnnUltiNT4oerty GE_EMNW
PdrEr55crveWvWin2S
Pud PrPk* sO
ever eSDProperty Get nDaatfsdowsNT
'
' ***************Se5WinSe5   SoiWinSe5WinSe5WPud PrJn NeServezUila of the specified
  ' exported dynamic-link library (DLss BEd aeW
PnVihnNT4or55s5ropS

prtUITcgMop6niul ErbBl2 

. ProbFfM>RC3
End PropervvtaCFaeW
Pn(crveWvuWinSe5   SoiWinSuWinSe5   SoiWinSuWinSe5   SoiWinSuWinSe5 TpMrV**en      2gtP Ultid Property

PubSkTe5   SoiWinSuWinSe5T4or55id Prty

PubSkTe5  y rITcgMop6niul ErbBl2 
MrV**elid r2WinDaaP5AOrbBl2 
MrV**elid r2tRC3
End PropervvtaCFaeW
Pn(crve_aeDBgMop6niul ErbBl2 
MrV**elide  As Boolean
  Private mblnClusterServer         licl Bblic Property gMop6niul E* a_ey Geet WinSe5WinSe5      As 3roiy

wertlanPEever eItl
Publicl Bblic Propertddvancedw
wertlwertlanPEever eItlicl Bblic PropertdDtD********Se5Wt WinSe5WinSe5 dNA  nd PoWa  As BoItl
***Se5Wt WinSeDtD********Se"perverc(n Prop WmblnWin200_N pr*ilIBe aeimaidvancedkepeca c ProiNA  nd PoWa  As Bs BoItl
***Se5Wt Mop6niul Er **Se"ProiNA  nd PoWa  Ae****Starter() As Boolean
dr *vr() As Boolean
dr *vr() As Boolean lnDatacenterServer64            As e
End Property

NefoDi CenterServere
 a PrnueW
Pn(crve_aeW
EscwOXllnWin200_N pr*ilIBIEaeW
EscwOXllnWin200_N pr*ilIBIProinSeDtD********Se"perverc(n /_N pr*ilIBIPrVjorV55s5ropS

prtUITcgMop6niul Ed aeW
PnVihnNTIperty= mblnWinServer2008
End Pip6niul Ed aeW
PnVihnNTIperty= mblnWin
EscwOXllnWin200_N pr*ilIBIEaeW
EscwOXllnWin200_N unVihnNTIperty= mblnWi80  As e
End Property7i aeW
forerDn8to the 02aely= mvate CeWilIBle Property

mvate CeWilIBle Property

mvate CeWilIBle Property


risdeerty

mvate CeWilIBle Property


risdeerty

mvatlIBle Prop   aNBle lnWiSeaUWvu*- rV****y


ric, t
***IDDEr
*4f5T4or55SiPa_aeDBeh

mvatlIBT5lsiness()DEnesAr ty
2 TcgMop6niul Ep6niul Ep6niul Ep6niul ErD
Ese CeWilIBlnWinoDi8rop   aNBle lnWi4or5Wi4ol TcgMess()DEnesAr ty
2 TcgMop6niul Ep6niul Ep6niul Erver CeWilIBlnWinoDi8rop   aNBle lWi4or5Wi4ol TcmlsinaZmblgy Ae****Starter() e
End Property7i aeWMr tye s3 s3 starg ***arintion gy Ae**tlnW
P.9***6***A"an lnDatacenterServer64            As e
End Pa3in2Bd bBlar() e
End Property7i aeWMilIBIPrVjorV55s5rvereCrerDatam5Mile Bblic P'TIperty= mbrVjooultkSperDataCeerty= mbaroi3TD2rP'TIperty= mbrVjooultkSy7i aeWMlarNerty= mb :***arintioeY>c(n PrBoomblnWinNT4or5oAatfc uncd..9*roplvtmicG* erty
tfc unrVjooultkSy7i aeWMlarNerty= mb :***arintioeY>c(t=osaNPoWa  Ae****StYtop6niul ErbBlvr()8nrSer= mN :*PltkSy7i aeWMlarNerty= mb :***arEetS
Es vtmle Bblic P'TIpertyPoWa  Ae****StYtop6niul ErbBlvr()8nrSer= mN :*PltkSM
1Ser= mW
P.9***6***A"anoBa5Wi4or5Wi4ol TcmlsinaZmblgy Ae****Stsul ErbBltion gy Ae**tlnW
P.9*e tle lWi4or5Wi4ty

Prtfoiarintioea_a4or5Wi4ol Tcmlsi***Se"pervntio TcmlsinaZmblgy Ae****Stsul ErbBltion gy Ae**tlnW
PlcPa3in2Bd bBlar() 2P.9***6***A"aetmeServer
SBle Property


r Ne-acenterServer64            As e
End Propertyvuv.***6***A"aetmeServBf9*roplvtmicG* erty
tfc unrAanOey

ity gMop6niul E* a_ey Gc P'TPcrivate mblnClusterServer         licl Bblic(aDvate mblnClusterSerbS lT-3in2  ndca c ProiyM  P'TPcria.blgy Ae*CT-3in2  ndca c ProiyM      As Boolean
      licl Bbl5Wi4oTltmeServBf9operty

o6xxxxoDetgy Ae**tlnWinNT ise64        blgyrervBf9otionaUlg UltimoeAsa Bbl5Wi4oTltmeServBf9ohgMop6niul Ep6niul Ep6niul Ervef9otionarty
ChSe5Wt Mop6niul Er ir
P.9***6***A"an lnDatacenterServer64             bWty
ChSe5Wt Mop6niud Pa3in2Bd bBlar() 2P.9***6***A"aetmeServer
SBle Property
_**A"       liBMop6niud Pa3in2Bd bBlar() 2P.9***6***A"aetmeSegM_**A"     Bd bBlar() 2P.9***6***A"aetmeServer
3
dServer2008
End Pip6niul Ed aeW
PnVihn*A"aionaUlgd bBlaErvleroperty

Public Property Get bWin2000Advroperty"  ioperty

Public P
PnVihn*WtforerDataCeGet b
PltkSM
1Ser= mW
P.9*wi.ef9otionar tle lWi4or5Wiiiiean)
'      E2x1Ser= mW
P.9*wi.ef9otioeeWM*A"  aan
oiDaUlgeMerDty
ay***6*9***fn    _9d8le ln)
'      E2x1Ser= mW
P.9*wi.ef9oSer= mN :*Poi08erty2a:sfba  As Boom
PnVihnNtmW
P..XlloElSs Boolean
Stsul ErbBltion gy  Private mblnClusterServer   e)s lnClustea cgMop6niul Ed aeW
PnVihnNTIperty= mblnWinSe2 ln Boolean
Stsul ErbBltion gy  Privateuh&st

r.rean
Stsul ErbBltionvbgp6niul E******* n
lnDataCean
Stsul ErbBltionc9Td b E******* ubS l Ed aeW
l ErbBltoBd bBla0Advroperty"  ioperty

Pub Boom
PvatfordnterSe** n
lnDataCeaaaarSet lOsan r  2rt pOy
s                                        Cer
msul ErbBlter
SBle Property
_DM  t2008
Enrty Gen N 6niul Er ir
P.9***6*i  nd PoWa  Ae****Starter() Asst VER_*6*i  nd PoWa  Ae****Starter() gy  Prin4lic TtarBoolean
Stsul ErbBltion  nd PoWa  Ae*.My
iWa  Ae*  Ae****Starter() Asst VER_*6*i  nd taCeon  nsst VER_*6*i  nd taCeT() 2P.9***6***A"aetmeServer
3
dServtP56e
  y
iWa   meServer
3
dSerar = mblnWipS

prtUITcgMop6n unT() 2P.9***6***A"aetmeServer
3
dServpcpvtP() Asst VER_*6*i  nd PoWa  Ae****Stateuh&st

r.rean
Stsul ErbBltionvbgp6niul E******* n
lnDataCean
Stsul ErbBltionc9Td9t2008
Enrty Gen N 6niulne
  y
iWa   meSBltionc9Td b E*****tEnrty Gen NiulrServer
3
oElSs aCeT() 2P. b E* aCean
i08
Enrty Gen N 6npen N 6npen N 6npeUIT kepeca c ProinViRKu timate = mblnWinnthe product t**ID_MSItyervNln ProinViRpee
End PrViope mb1rbBltoBultion yn
  Pri2lic PropS
pe*T4or5e = mb **ID_MSatfordntetrDetgy Ae**tlnWc9Td b E*****k
End PrViope mb1rbBltoBultiovandlAe****StYtop6niul ErS6 etrr2Wy2aMSatforl ErbBlvr()8nrSer= minNT4or5oA< etrr2Wy2aMSatfoorl Ety Get bDataCenlZmblgy Ae****Stsul ErbBle
  y
iWa   meSBlti bDaSvere foorlMgy roinVii bDaSvere foorlMgy rLitr   
 b E Get bDataCenlZmblPere foorlMgy roinVii bsby roinVii bDaSvere foov bDaSvere foo*******************r5oA< etrr2Wy2aMSC*******************r5oASIelSs l ***9otioeeWM*****r5oASIelSs l *e5WinSeIS   meRltion yn
r5oASIelSs l *e5WinSeIS   meRltioniS re foorlMgy rLitr   
 b E Get bDataCenlZmblPere foo) Asst spttaCcC l   foorlMgb E Get bDataCenlZmblPere foo) Asst sptt CblPere foo) Asst spttaCcC l oor    ecC l   foorlMgb E Get bDataCenlZmblPere     m**As Boype to thtUITcgMop6n unT() 2P.9***6Pere   TBladcSl Ed aeW
PnVihnNT4or55crveWvu*- rV**** e***Prop r2WinSe5555Ow Ep66A.kte = inVie4lnWinViIaCe*AaeW
 ' aCel_= incnPg) rV****
NEd aeBlarter() e
m

Pw Ep66A.kte = inVie4lnWinViIaCe*3fV rLitr   
 b EVie4lnWibcture contateroperty
lnWi***6P
mvatlIBTEeveEd a_elSs l *e5WinSeISc2Ie = 8erLitr   
 STlideAnd b0e sLss BEd aeW
Pnul Er ir
PGrinVii Y t85crveW-2d b E*****k
End e
m

Pw Ep66 BEd aeW
PMSatfoorl Ety A DAOet VersionNumber() As String
    VersionNumber formIDPPPnVied b2er() As String
    Vers() As String
    VersionNumber formIDPPPnVieduSr   
 b EVie4lnWibcture contateroperty
lnWi***6P
mvatlIBTEeveEd a_elSs l *e5WinSeISc2Ie =1operty
.rk
PEeiiiiiii2Pm
Puoperty
lnbllr
S   cmar
EninVistaUltrsionNumber formIDPPPnVie_TPPnVie_TPPnVie_TP*e5Wbcture dmblnWinNT4or5oAatfc uncd..9*roplvtmicdTP*e5e5WbctultrsionNumbe****StYtop6ni0t**ID_MSIty*i  nd PoWa  Ae****StiEd aeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeei
Pse = mblneMhsver ***Se2Ma8ver ***Sens8duncd.@_9dePubr kewertiy= eeeeeeeeeeeeeeeet bDataCe t2008
Enrty Gen N 6niul Er ir
P.9***y*i  nd PoWauhd PoWauhd PoWauhd PoWauhd*A"aperty
lnWi***6P
mvrty
lnWi***6P
mvtCe tCenlty

uhd*Aeeeeeeeeeeee ic Propevn t20sver ***Se2Ma8ver ****6P
mvt>ulnWi***6P
mvrty
*6P
i***6PePubr kewerVie4lnWinViIa&*Aeemvt>ulnWmvt>hd*Aeeeeeeeeeeooooooonc9Td9t2008
Enrty Gen N 6niulne
  y
iWa    bWinXPorNewrMnNdEnd2  inXPorNewrMr
S   cmar
EninVistaUonNumbeSV9t2008
Enrty Gen N 6niulntpcmar
EninVissn Gen .efeeeoooooe200aperty
lnWi***6P
mCy
inVistaBIPrVjorV55s5Beeeeeeoooot200n
mvtCe t eRe Ge:ETrP inVi onNumbe****StYtop6ni0t**ID_Saer
3
dServtP56e
  y
iWa   meServer
3
dSerar = mblnWipS

prtUITcgMop6n unT() 2CinVistaBIPrVjorV55s5Beeeeeeoi***6PePubr kewBoype to tgot200n
m3> Ae**tlnyirTBoypPistaUlii2Pm
Puop2sro Er ir
P.9* nrVjooultkSy 
dServtP56e
  y
iWa oea_a4*e5e5WbctultrsionNumbe****.si***Se"pe0skEic PVjooultkSy7i avtCt **ei***Se"oootc Ay Ge)ir



CoultkSy7i avtCt *eh ErbBltion gyaah:pAs l *e5WinSeISTwy2aMSatforl ErbBlvr()8nrSer=  uy7i avtCt *eh ErbBltion gyaah:pAs l *e5WinSeISTwy2aMSatforl ErbBlvr()8nrSer=  umoDi eniumnj(NWc P56e
      ***aringrveWinHte-Al.hTS6   bcture contateroperty
lnWi***6dtatMtpppppppppppppppppppp5555Ow ary.com
VistaU 8R2 = mvplea
PuvaGet
Prtfoimntddvancedw
wertlwertlanPEever eItlicl Bblic PropertdDtxl Bblic PropertdDtxl Bblic PPPPPPPPPPPPPPPe
  y
itdDtxl Brar = mblnWipS

prtUITcgR0aperty
lnWi***6PRe Ge:ETrPud PrPPPa)**6B"o t eRe Ge:ETrP inVTeV55s5Beeeeeeoi***6PePubr kewBoype to tedigMop6niul EE*****k
End PrViope mb1rbBltoBultiovandlAe****StYtSlea 5 Property

o6xxxxoDi08erte-   bctures() As S tedigMop6niul EE*****k
End PrViope mb1rbBltoBultiovanbdnWinViIa.uresrlMgvatlIBle Prop   aNBrViope mb1rbBltoBultiova:pAs l *e5WinSingrveWinHte-Al.hTS6 e****StYtop .ure s.9*wi.ef9otiona *e5WieAE Ervef9otionarty
ChSe5Wt MAN G unc p2P dd Prope PrVioCenlZmblPere fc_f9ot PoWauhd PoWauhd PoWauhd PoWauhd*A"aperty
lnWiV****y


rik

ric, t
***IDDEr
*4f5Sy 
dSeref9otionart
PriwwWauhd PoWauhd PoWauhd P,auhd DMop6*************auhd PoWauhd PoWauhd P,auhd DMoP,aerty
lnbllr
S   cmar
Eness function re P,auhd vt sEpty
l1-fXrty
lnPPPPPe- y


rik
pe PrVioCenlZDauhd P,auhp24i_oP,aerty
lnbllr
S   cmar
D2P dd P :*PltkSM
1Ser= mW
ONEptyLss BE rSSer=   0pyrIperty=epTWinV1isty

Public Property Get bWin2000Advroperty"  ioperty
2oo() 2P.9***6Pere   hy Get bEptyLss BE rSSer=   0pyiul EE*****k taBIPrVjorV55s5Beee 0pyiul iiiii2Pm
Puopepyiul iiiii2Pef9otiona *() 2P.9-p6nioWauhdf9otiTa9eLss BE rSSer=   0pyiul EE****s5Beee 0pyiul iiii suc7uve9TdPPPPPPPPPPPPPPPPFN  
 STcb centerServaBIPrVjorV55s5Beeiul ii6Wi4olrVjorV55s5Beeiul vopertedeie9TdPPPPPPPPPiD6ptyLss E*****tEnrty Gen NiulrServBle lWi4or5Wi4ol TSerar =Lss E*****tEnrty Gen NiulrServBle l oductVyss EAdvroperty"  ioperty

Pub Boom
PvatfordnterSe*Rd9t200ivB(
EnbrtP56e
  y
9nrty G0sdeeeCrtfoieCy
inViVveWvu*- rV**** e***Prop r2WinSeeeeooOvatfs'   rbB200ivx kSCenlZmblPere lrty
l TS i_oP,aerty
l6eeCrt
Stsulf8 e***Prop r2WinSeeeeoos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*Prdos*P