home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 7_2009-2012.ISO / data / zips / Multi_hash2224896142012.psc / clsOperSystem.cls < prev   
Text File  |  2012-06-14  |  48KB  |  1,068 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cOperSystem"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = False
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
  15. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  16. ' ***************************************************************************
  17. '  Module:        clsOperSystem
  18. '
  19. '  Description:   Determines the operating system.  When this class is
  20. '                 initialized, the GetWindowsVersion() routine is called.
  21. '                 This will instantly set the flags to their appropriate
  22. '                 value.  This module does not test with operating sytems
  23. '                 earlier than Windows NT4.
  24. '
  25. '                 Identifying the current operating system is usually not
  26. '                 the best way to determine whether a particular operating
  27. '                 system feature is present. This is because the operating
  28. '                 system may have had new features added in a redistributable
  29. '                 DLL. Rather than using GetVersionEx to determine the
  30. '                 operating system platform or version number, test for the
  31. '                 presence of the feature itself.
  32. '                 http://msdn.microsoft.com/en-us/library/ms724832(VS.85).aspx
  33. '
  34. ' Important:      This module must have access to modTrimStr.bas
  35. '
  36. ' -----------------------------------------------------------------------
  37. ' The base version information for various Windows versions is:
  38. '
  39. ' Version                     Number  Major  Minor  Other info
  40. ' -----------------------------------------------------------------------
  41. ' Windows 8                    ?.?      ?      ?    Official release due in Fall of 2012
  42. ' Windows 7                    6.1      6      1    OSVERIONINFOEX.wProductType = VER_NT_WORKSTATION
  43. ' Windows Server 2008 R2       6.1      6      1    OSVERIONINFOEX.wProductType <> VER_NT_WORKSTATION
  44. ' Windows Server 2008          6.0      6      0    OSVERSIONINFOEX.wProductType <> VER_NT_WORKSTATION
  45. ' Windows Vista                6.0      6      0    OSVERSIONINFOEX.wProductType = VER_NT_WORKSTATION
  46. ' Windows Server 2003 R2       5.2      5      2    GetSystemMetrics(SM_SERVERR2) <> 0
  47. ' Windows Server 2003          5.2      5      2    GetSystemMetrics(SM_SERVERR2) = 0
  48. ' Windows Home Server          5.2      5      2    OSVERSIONINFOEX.wSuiteMask = VER_SUITE_WH_SERVER
  49. ' Windows XP Pro x64 Edition   5.2      5      2    (OSVERSIONINFOEX.wProductType = VER_NT_WORKSTATION) And
  50. '                                                   (SYSTEM_INFO.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64)
  51. ' Windows XP                   5.1      5      1
  52. ' Windows 2000                 5.0      5      0
  53. ' Windows NT4                  4.0      4      0
  54. ' -----------------------------------------------------------------------
  55. '
  56. ' Reference:   Randy Birch
  57. '              GetVersionEx: Windows Version Info (Wrapper Routines)
  58. '              http://vbnet.mvps.org/code/helpers/iswinversion.htm
  59. '
  60. '              Karl Perterson's Classic VB
  61. '              http://www.mvps.org/vb/
  62. '
  63. '              GetVersionEx Function
  64. '              http://msdn2.microsoft.com/en-us/library/ms724451(VS.85).aspx
  65. '
  66. '              Getting the System Version (Source code)
  67. '              http://msdn2.microsoft.com/en-us/library/ms724429(VS.85).aspx
  68. '
  69. '              Operating System Version
  70. '              http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832%28v=vs.85%29.aspx
  71. '              
  72. '              OSVersionInfoEx Structure
  73. '              http://msdn2.microsoft.com/en-us/library/ms724833(VS.85).aspx
  74. '
  75. '              GetSystemMetrics Function
  76. '              http://msdn2.microsoft.com/en-us/library/ms724385(VS.85).aspx
  77. '
  78. '              GetSystemInfo Function
  79. '              http://msdn2.microsoft.com/en-us/library/ms724381(VS.85).aspx
  80. '
  81. '              GetProductInfo Function
  82. '              http://msdn2.microsoft.com/en-us/library/ms724358.aspx
  83. '
  84. ' Important:   Developers working in the Windows Vista environment should be
  85. '              aware that if this code is run in the VB IDE and you are
  86. '              notified that the operating system is other than Windows Vista,
  87. '              do the following:
  88. '
  89. '              1.  Close the VB IDE (Visual BASIC Integrated Development Environment)
  90. '              2.  Locate the file VB.EXE
  91. '              3.  Right mouse click and select Properties >> Compatibility tab
  92. '              4.  Remove any checkmarks and close the window
  93. '              5.  Restart the VB IDE
  94. '
  95. '  -----------------------------------------------------------------------
  96. '
  97. '  Example:    Set objOS = new cOperSystem  ' Instantiate class object
  98. '
  99. '              ' Is this Windows XP?
  100. '              If objOS.bWinXP then
  101. '                  Msgbox objOS.VersionName & vbNewLine & _
  102. '                          "Version " & objOS.VersionNumber & " " & _
  103. '                          objOS.ServicePack
  104. '              Else
  105. '                  Msgbox "This is not Windows XP"
  106. '              End If
  107. '
  108. '              Set objOS = Nothing  ' Free class object from memory
  109. '
  110. ' ===========================================================================
  111. '    DATE      NAME / eMAIL
  112. '              DESCRIPTION
  113. ' -----------  --------------------------------------------------------------
  114. ' 15-Oct-2006  Kenneth Ives  kenaso@tx.rr.com
  115. '              Converted to a class, renamed some of the variables,
  116. '              Combined some of the routines for speed.  When this class is
  117. '              initialized, the GetWindowsVersion() routine is called.  This
  118. '              will instantly set the flags to their appropriate value.
  119. ' 16-Jan-2008  Kenneth Ives  kenaso@tx.rr.com
  120. '              Dropped support for any operating systems earlier than Windows
  121. '              NT4 Servers and Windows 2000.
  122. ' 17-Apr-2008  Kenneth Ives  kenaso@tx.rr.com
  123. '              Updated for additional Windows Vista versions.
  124. '              Updated 64-bit testing routines.
  125. ' 30-Jul-2008  Kenneth Ives  kenaso@tx.rr.com
  126. '              Updated for Windows 2000 Data Center Server
  127. ' 20-Aug-2008  Kenneth Ives  kenaso@tx.rr.com
  128. '              Updated testing logic for enhanced systems
  129. ' 04-May-2009  Kenneth Ives  kenaso@tx.rr.com
  130. '              Rewrote module.
  131. '              Added testing for additional Windows operating systems.
  132. ' 05-Sep-2009  Kenneth Ives  kenaso@tx.rr.com
  133. '              Thanks to Maria AAM for pointing out that I needed to add an
  134. '              additional property named bOperSystem64() denoting a 64-bit
  135. '              operating system in general
  136. ' 20-Jul-2011  Kenneth Ives  kenaso@tx.rr.com
  137. '              - Updated logic in TestForOldestVersion() routine
  138. '              - Added property bWinXPSP3() for Windows XP Service Pack 3
  139. '              - Updated IsWinXP() routine
  140. '              - Updated TestForOtherServers() routine
  141. ' 26-Mar-2012  Kenneth Ives  kenaso@tx.rr.com
  142. '              - Deleted RemoveTrailingNulls() routine from this module. 
  143. '              - Changed call to RemoveTrailingNulls() to TrimStr module 
  144. '                due to speed and accuracy.
  145. '              - Updated TestForOldestVersion() routine logic.
  146. ' ***************************************************************************
  147. Option Explicit
  148.  
  149. ' ***************************************************************************
  150. ' Constants
  151. ' ***************************************************************************
  152.   ' used by OSVERSIONINFOEX.PlatformID
  153.   Private Const VER_PLATFORM_WIN32_NT                As Long = 2
  154.  
  155.   ' used by OSVERSIONINFOEX.wProductType
  156.   Private Const VER_NT_WORKSTATION                   As Long = &H1     ' Windows Vista, XP Pro, XP Home Edition, or 2000 Pro
  157.   Private Const VER_NT_DOMAIN_CONTROLLER             As Long = &H2     ' Windows Server 2008, Windows Server 2003, or Windows 2000 Server
  158.   Private Const VER_NT_SERVER                        As Long = &H3     ' Windows Server 2008, Windows Server 2003, or Windows 2000 Server
  159.  
  160.   ' used by OSVERSIONINFOEX.wSuiteMask
  161.   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
  162.   Private Const VER_SUITE_ENTERPRISE                 As Long = &H2     ' Windows Server 2008 Enterprise, Windows Server 2003, Enterprise Edition, or Windows 2000 Advanced Server is installed
  163.   Private Const VER_SUITE_BACKOFFICE                 As Long = &H4     ' Windows backoffice suite
  164.   Private Const VER_SUITE_TERMINAL                   As Long = &H10    ' Terminal Services is installed
  165.   Private Const VER_SUITE_EMBEDDEDNT                 As Long = &H40    ' Windows XP Embedded is installed
  166.   Private Const VER_SUITE_DATACENTER                 As Long = &H80    ' Windows Server 2008 Datacenter, Windows Server 2003, Datacenter Edition, or Windows 2000 Datacenter Server is installed
  167.   Private Const VER_SUITE_PERSONAL                   As Long = &H200   ' Windows Vista Home Premium, Windows Vista Home Basic, or Windows XP Home Edition is installed
  168.   Private Const VER_SUITE_BLADE                      As Long = &H400   ' Windows Server 2003, Web Edition is installed
  169.   Private Const VER_SUITE_STORAGE_SERVER             As Long = &H2000  ' Windows Storage Server 2003 R2 or Windows Storage Server 2003 is installed
  170.   Private Const VER_SUITE_COMPUTE_SERVER             As Long = &H4000  ' Windows Server 2003, Compute Cluster Edition is installed
  171.   Private Const VER_SUITE_WH_SERVER                  As Long = &H8000  ' Windows home server is installed
  172.   Private Const VER_SUITE_SMALLBUSINESS_RESTRICTED   As Long = &H20    ' Microsoft Small Business Server is installed with the restrictive client license in force
  173.  
  174.   Private Const SM_TABLETPC                          As Long = 86
  175.   Private Const SM_MEDIACENTER                       As Long = 87
  176.   Private Const SM_STARTER                           As Long = 88
  177.   Private Const SM_SERVERR2                          As Long = 89
  178.  
  179.   Private Const PROCESSOR_ARCHITECTURE_INTEL         As Long = 0       ' 32-bit
  180.   Private Const PROCESSOR_ARCHITECTURE_IA64          As Long = 6       ' 64-bit
  181.   Private Const PROCESSOR_ARCHITECTURE_AMD64         As Long = 9       ' 64-bit
  182.  
  183.   ' GetProductInfo possible values
  184.   Private Const PRODUCT_ULTIMATE                     As Long = &H1     ' Ultimate Edition
  185.   Private Const PRODUCT_HOME_BASIC                   As Long = &H2     ' Home Basic Edition
  186.   Private Const PRODUCT_HOME_PREMIUM                 As Long = &H3     ' Home Premium Edition
  187.   Private Const PRODUCT_ENTERPRISE                   As Long = &H4     ' Enterprise Edition
  188.   Private Const PRODUCT_HOME_BASIC_N                 As Long = &H5     ' Home Basic Edition
  189.   Private Const PRODUCT_BUSINESS                     As Long = &H6     ' Business Edition
  190.   Private Const PRODUCT_STANDARD_SERVER              As Long = &H7     ' Server Standard Edition (full installation)
  191.   Private Const PRODUCT_DATACENTER_SERVER            As Long = &H8     ' Server Datacenter Edition (full installation)
  192.   Private Const PRODUCT_SMALLBUSINESS_SERVER         As Long = &H9     ' Small Business Server
  193.   Private Const PRODUCT_ENTERPRISE_SERVER            As Long = &HA     ' Server Enterprise Edition (full installation)
  194.   Private Const PRODUCT_STARTER                      As Long = &HB     ' Starter Edition
  195.   Private Const PRODUCT_DATACENTER_SERVER_CORE       As Long = &HC     ' Server Datacenter Edition (core installation)
  196.   Private Const PRODUCT_STANDARD_SERVER_CORE         As Long = &HD     ' Server Standard Edition (core installation)
  197.   Private Const PRODUCT_ENTERPRISE_SERVER_CORE       As Long = &HE     ' Server Enterprise Edition (core installation)
  198.   Private Const PRODUCT_ENTERPRISE_SERVER_IA64       As Long = &HF     ' Server Enterprise Edition for Itanium-based Systems
  199.   Private Const PRODUCT_BUSINESS_N                   As Long = &H10    ' Business Edition
  200.   Private Const PRODUCT_WEB_SERVER                   As Long = &H11    ' Web Server Edition (full installation)
  201.   Private Const PRODUCT_CLUSTER_SERVER               As Long = &H12    ' Cluster Server Edition
  202.   Private Const PRODUCT_HOME_SERVER                  As Long = &H13    ' Home Server Edition
  203.   Private Const PRODUCT_SMALLBUSINESS_SERVER_PREMIUM As Long = &H19    ' Small Business Server Premium Edition
  204.   Private Const PRODUCT_HOME_PREMIUM_N               As Long = &H1A    ' Home Premium Edition
  205.   Private Const PRODUCT_ENTERPRISE_N                 As Long = &H1B    ' Enterprise Edition
  206.   Private Const PRODUCT_ULTIMATE_N                   As Long = &H1C    ' Ultimate Edition
  207.    
  208. ' ***************************************************************************
  209. ' Type structures
  210. ' ***************************************************************************
  211.   ' The OSVERSIONINFOEX data structure contains operating system version
  212.   ' information. The information includes major and minor version numbers,
  213.   ' a build number, a platform identifier, and information about product
  214.   ' suites and the latest Service Pack installed on the system. This structure
  215.   ' is used with the GetVersionEx and VerifyVersionInfo functions.
  216.   Private Type OSVERSIONINFOEX
  217.       OSVSize           As Long          ' size of this data structure (in bytes)
  218.       dwVerMajor        As Long          ' ex: 5
  219.       dwVerMinor        As Long          ' ex: 01
  220.       dwBuildNumber     As Long          ' ex: 2600
  221.       PlatformID        As Long          ' Identifies operating system platform
  222.       szCSDVersion      As String * 128  ' ex: "Service Pack 3"
  223.       wServicePackMajor As Integer
  224.       wServicePackMinor As Integer
  225.       wSuiteMask        As Integer
  226.       wProductType      As Byte
  227.       wReserved         As Byte
  228.   End Type
  229.  
  230.   ' The SYSTEM_INFO structure contains information about the current computer
  231.   ' system.  This includes the architecture and type of the processor, the
  232.   ' number of processors in the system, the page size, and other such information.
  233.   Private Type OEM_ID
  234.       wProcessorArchitecture As Integer
  235.       wReserved              As Integer
  236.   End Type
  237.   
  238.   Private Type SYSTEM_INFO
  239.       dwOemID                     As OEM_ID
  240.       dwPageSize                  As Long
  241.       lpMinimumApplicationAddress As Long
  242.       lpMaximumApplicationAddress As Long
  243.       dwActiveProcessorMask       As Long
  244.       dwNumberOfProcessors        As Long
  245.       dwProcessorType             As Long
  246.       dwAllocationGranularity     As Long
  247.       wProcessorLevel             As Integer
  248.       wProcessorRevision          As Integer
  249.   End Type
  250.  
  251.   ' Windows operating system formatted information
  252.   Private Type OS_INFORMATION
  253.       PlatformID   As Long
  254.       VersionName  As String
  255.       VersionNo    As String
  256.       BuildNo      As String
  257.       ServicePack  As String
  258.   End Type
  259.  
  260. ' ***************************************************************************
  261. ' API Declares
  262. ' ***************************************************************************
  263.   ' This function obtains extended information about the version of the
  264.   ' operating system that is currently running.
  265.   Private Declare Function GetSystemMetrics Lib "user32" _
  266.           (ByVal nIndex As Long) As Long
  267.  
  268.   ' This function obtains extended information about the version of the
  269.   ' operating system that is currently running.  If the function succeeds,
  270.   ' the return value is a nonzero value.
  271.   Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
  272.           (LpVersionInformation As Any) As Long
  273.  
  274.   ' The GetProcAddress function returns the address of the specified
  275.   ' exported dynamic-link library (DLL) function. If the function call fails,
  276.   ' the return value is null.
  277.   Private Declare Function GetProcAddress Lib "kernel32" _
  278.           (ByVal hModule As Long, ByVal lpProcName As String) As Long
  279.  
  280.   ' Retrieves a module handle for the specified module. The module must have
  281.   ' been loaded by the calling process.
  282.   Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" _
  283.          (ByVal lpModuleName As String) As Long
  284.   
  285.   ' This function returns information about the current system.
  286.   Private Declare Sub GetSystemInfo Lib "kernel32" _
  287.           (lpSystemInfo As SYSTEM_INFO)
  288.   
  289.   ' Retrieves information about the current system running Windows 2000 Pro or
  290.   ' newer.  It is equivalent to the GetSystemInfo function.
  291.   Private Declare Sub GetNativeSystemInfo Lib "kernel32" _
  292.           (lpSystemInfo As SYSTEM_INFO)
  293.  
  294.   ' Retrieves the product type for the operating system on the local
  295.   ' computer, and maps the type to the product types supported by the
  296.   ' specified operating system.
  297.   Private Declare Function GetProductInfo Lib "kernel32" _
  298.           (ByVal dwOSMajorVersion As Long, ByVal dwOSMinorVersion As Long, _
  299.           ByVal dwSpMajorVersion As Long, ByVal dwSpMinorVersion As Long, _
  300.           pdwReturnedProductType As Long) As Long
  301.  
  302.   ' ZeroMemory is used for clearing the contents of a type structure.
  303.   Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" _
  304.           (Destination As Any, ByVal Length As Long)
  305.  
  306. ' ***************************************************************************
  307. ' Module Variables
  308. '
  309. '                    +-------------- Module level designator
  310. '                    |  +----------- Data type (Boolean)
  311. '                    |  |     |----- Variable subname
  312. '                    - --- ---------
  313. ' Naming standard:   m bln WindowsNT
  314. ' Variable name:     mblnWindowsNT
  315. '
  316. ' ***************************************************************************
  317.   Private mtypOSInfo                        As OS_INFORMATION
  318.   Private mtypOSVIEX                        As OSVERSIONINFOEX
  319.   Private mtypSI                            As SYSTEM_INFO
  320.   Private mstrVerName                       As String
  321.   Private mstrSrvPack                       As String
  322.   
  323.   Private mblnWindowsNT                     As Boolean
  324.   Private mblnWinNT4orNewer                 As Boolean
  325.   Private mblnWin2000orNewer                As Boolean
  326.   Private mblnWinXPorNewer                  As Boolean
  327.   Private mblnWinVistaOrNewer               As Boolean
  328.   
  329.   Private mblnWin2000                       As Boolean
  330.   Private mblnWin2000Pro                    As Boolean
  331.   Private mblnWin2000Workstation            As Boolean
  332.   Private mblnWin2000Server                 As Boolean
  333.   Private mblnWin2000DatacenterSvr          As Boolean
  334.   Private mblnWin2000AdvancedSvr            As Boolean
  335.   
  336.   Private mblnWinXP                         As Boolean
  337.   Private mblnWinXPSP2                      As Boolean
  338.   Private mblnWinXPSP3                      As Boolean
  339.   Private mblnWinXPHomeEdition              As Boolean
  340.   Private mblnWinXPPro                      As Boolean
  341.   Private mblnWinXPMediaCenter              As Boolean
  342.   Private mblnWinXPStarter                  As Boolean
  343.   Private mblnWinXPTabletPC                 As Boolean
  344.   Private mblnWinXPEmbedded                 As Boolean
  345.   
  346.   Private mblnWinVista                      As Boolean
  347.   Private mblnWinVistaSP1                   As Boolean
  348.   Private mblnWinVistaHomeBasic             As Boolean
  349.   Private mblnWinVistaHomeEdition           As Boolean
  350.   Private mblnWinVistaHomePremium           As Boolean
  351.   Private mblnWinVistaHomeServer            As Boolean
  352.   Private mblnWinVistaUltimate              As Boolean
  353.   Private mblnWinVistaBusiness              As Boolean
  354.   Private mblnWinVistaEnterprise            As Boolean
  355.   Private mblnWinVistaWorkstation           As Boolean
  356.   Private mblnWinVistaStarter               As Boolean
  357.   Private mblnWindows7                      As Boolean
  358.   
  359.   Private mblnWinServer2003                 As Boolean
  360.   Private mblnWin2003ServerR2               As Boolean
  361.   Private mblnWin2003StorageServer          As Boolean
  362.   Private mblnBladeServer                   As Boolean
  363.   Private mblnWebServer                     As Boolean
  364.   Private mblnWinHomeServer                 As Boolean
  365.   Private mblnClusterServer                 As Boolean
  366.   Private mblnComputeClusterServer          As Boolean
  367.   Private mblnWinServer2008                 As Boolean
  368.   Private mblnWinServer2008R2               As Boolean
  369.   Private mblnDataCenterServer              As Boolean
  370.   Private mblnDataCenterServerCore          As Boolean
  371.   
  372.   Private mblnBackOfficeServer              As Boolean
  373.   Private mblnDomainController              As Boolean
  374.   Private mblnEnterpriseServer              As Boolean
  375.   Private mblnEnterpriseServerCore          As Boolean
  376.   Private mblnTerminalServer                As Boolean
  377.   Private mblnSmallBusinessServer           As Boolean
  378.   Private mblnSmallBusinessServerPremium    As Boolean
  379.   Private mblnSmallBusinessRestrictedServer As Boolean
  380.   Private mblnStandardServer                As Boolean
  381.   Private mblnStandardServerCore            As Boolean
  382.   
  383.   ' 64-Bit Versions
  384.   Private mblnWinVista64                    As Boolean
  385.   Private mblnWinXPPro64                    As Boolean
  386.   Private mblnDataCenterItanium64           As Boolean
  387.   Private mblnEnterpriseItanium64           As Boolean
  388.   Private mblnDataCenter64                  As Boolean
  389.   Private mblnEnterprise64                  As Boolean
  390.   Private mblnStandard64                    As Boolean
  391.   Private mblnComputeServer64               As Boolean
  392.   Private mblnDatacenterServer64            As Boolean
  393.   Private mblnEnterpriseServer64            As Boolean
  394.   Private mblnWebBladeServer64              As Boolean
  395.   Private mblnStandardServer64              As Boolean
  396.   Private mblnOperSystem64                  As Boolean
  397.  
  398.  
  399. ' ***************************************************************************
  400. ' ****                      Properties                                   ****
  401. ' ***************************************************************************
  402.  
  403. Public Property Get VersionName() As String
  404.     VersionName = mtypOSInfo.VersionName
  405. End Property
  406.  
  407. Public Property Get VersionNumber() As String
  408.     VersionNumber = mtypOSInfo.VersionNo
  409. End Property
  410.  
  411. Public Property Get BuildNumber() As String
  412.     BuildNumber = mtypOSInfo.BuildNo
  413. End Property
  414.  
  415. Public Property Get VersionData() As String
  416.  
  417.     With mtypOSInfo
  418.         VersionData = .VersionName & " " & _
  419.                       .VersionNo & "." & _
  420.                       .BuildNo
  421.     End With
  422.     
  423.     If mblnWinNT4orNewer Then
  424.         VersionData = VersionData & " " & ServicePack
  425.     End If
  426.  
  427. End Property
  428.  
  429. Public Property Get ServicePack() As String
  430.     ServicePack = mtypOSInfo.ServicePack
  431. End Property
  432.  
  433. Public Property Get PlatformID() As Long
  434.     PlatformID = mtypOSInfo.PlatformID
  435. End Property
  436.  
  437. Public Property Get bWindowsNT() As Boolean
  438.     bWindowsNT = mblnWindowsNT
  439. End Property
  440.  
  441. Public Property Get bWinNT4orNewer() As Boolean
  442.     bWinNT4orNewer = mblnWinNT4orNewer
  443. End Property
  444.  
  445. Public Property Get bWin2000() As Boolean
  446.     bWin2000 = mblnWin2000
  447. End Property
  448.  
  449. Public Property Get bWin2000Pro() As Boolean
  450.     bWin2000Pro = mblnWin2000Pro
  451. End Property
  452.  
  453. Public Property Get bWin2000Workstation() As Boolean
  454.     bWin2000Workstation = mblnWin2000Workstation
  455. End Property
  456.  
  457. Public Property Get bWin2000Server() As Boolean
  458.     bWin2000Server = mblnWin2000Server
  459. End Property
  460.  
  461. Public Property Get bWin2000DatacenterSvr() As Boolean
  462.     bWin2000DatacenterSvr = mblnWin2000DatacenterSvr
  463. End Property
  464.  
  465. Public Property Get bWin2000AdvancedSvr() As Boolean
  466.     bWin2000AdvancedSvr = mblnWin2000AdvancedSvr
  467. End Property
  468.  
  469. Public Property Get bWin2000orNewer() As Boolean
  470.     bWin2000orNewer = mblnWin2000orNewer
  471. End Property
  472.  
  473. Public Property Get bWinXP() As Boolean
  474.     bWinXP = mblnWinXP
  475. End Property
  476.  
  477. Public Property Get bWinXPSP2() As Boolean
  478.     bWinXPSP2 = mblnWinXPSP2
  479. End Property
  480.  
  481. Public Property Get bWinXPSP3() As Boolean
  482.     bWinXPSP3 = mblnWinXPSP3
  483. End Property
  484.  
  485. Public Property Get bWinXPHomeEdition() As Boolean
  486.     bWinXPHomeEdition = mblnWinXPHomeEdition
  487. End Property
  488.  
  489. Public Property Get bWinXPProfessional() As Boolean
  490.     bWinXPProfessional = mblnWinXPPro
  491. End Property
  492.  
  493. Public Property Get bWinXPMediaCenter() As Boolean
  494.     bWinXPMediaCenter = mblnWinXPMediaCenter
  495. End Property
  496.  
  497. Public Property Get bWinXPStarter() As Boolean
  498.     bWinXPStarter = mblnWinXPStarter
  499. End Property
  500.  
  501. Public Property Get bWinXPTabletPC() As Boolean
  502.     bWinXPTabletPC = mblnWinXPTabletPC
  503. End Property
  504.  
  505. Public Property Get bWinXPEmbedded() As Boolean
  506.     bWinXPEmbedded = mblnWinXPEmbedded
  507. End Property
  508.  
  509. Public Property Get bWinXPorNewer() As Boolean
  510.     bWinXPorNewer = mblnWinXPorNewer
  511. End Property
  512.  
  513. Public Property Get bWindows7() As Boolean
  514.     bWindows7 = mblnWindows7
  515. End Property
  516.  
  517. Public Property Get bWinVistaStarter() As Boolean
  518.     bWinVistaStarter = mblnWinVistaStarter
  519. End Property
  520.  
  521. Public Property Get bWinServer2003() As Boolean
  522.     bWinServer2003 = mblnWinServer2003
  523. End Property
  524.  
  525. Public Property Get bWin2003ServerR2() As Boolean
  526.     bWin2003ServerR2 = mblnWin2003ServerR2
  527. End Property
  528.  
  529. Public Property Get bWin2003StorageServer() As Boolean
  530.     bWin2003StorageServer = mblnWin2003StorageServer
  531. End Property
  532.  
  533. Public Property Get bComputeClusterServer() As Boolean
  534.     bComputeClusterServer = mblnComputeClusterServer
  535. End Property
  536.  
  537. Public Property Get bWinVista() As Boolean
  538.     bWinVista = mblnWinVista
  539. End Property
  540.  
  541. Public Property Get bWinVistaSP1() As Boolean
  542.     bWinVistaSP1 = mblnWinVistaSP1
  543. End Property
  544.  
  545. Public Property Get bWinVistaHomeBasic() As Boolean
  546.     bWinVistaHomeBasic = mblnWinVistaHomeBasic
  547. End Property
  548.  
  549. Public Property Get bWinVistaHomeEdition() As Boolean
  550.     bWinVistaHomeEdition = mblnWinVistaHomeEdition
  551. End Property
  552.  
  553. Public Property Get bWinVistaHomePremium() As Boolean
  554.     bWinVistaHomePremium = mblnWinVistaHomePremium
  555. End Property
  556.  
  557. Public Property Get bWinVistaHomeServer() As Boolean
  558.     bWinVistaHomeServer = mblnWinVistaHomeServer
  559. End Property
  560.  
  561. Public Property Get bWinVistaUltimate() As Boolean
  562.     bWinVistaUltimate = mblnWinVistaUltimate
  563. End Property
  564.  
  565. Public Property Get bWinVistaBusiness() As Boolean
  566.     bWinVistaBusiness = mblnWinVistaBusiness
  567. End Property
  568.  
  569. Public Property Get bWinVistaEnterprise() As Boolean
  570.     bWinVistaEnterprise = mblnWinVistaEnterprise
  571. End Property
  572.  
  573. Public Property Get bWinVistaWorkstation() As Boolean
  574.     bWinVistaWorkstation = mblnWinVistaWorkstation
  575. End Property
  576.  
  577. Public Property Get bWinServer2008() As Boolean
  578.     bWinServer2008 = mblnWinServer2008
  579. End Property
  580.  
  581. Public Property Get bWinServer2008R2() As Boolean
  582.     bWinServer2008R2 = mblnWinServer2008R2
  583. End Property
  584.  
  585. Public Property Get bWinVistaOrNewer() As Boolean
  586.     bWinVistaOrNewer = mblnWinVistaOrNewer
  587. End Property
  588.  
  589. Public Property Get bDataCenterServer() As Boolean
  590.     bDataCenterServer = mblnDataCenterServer
  591. End Property
  592.  
  593. Public Property Get bDataCenterServerCore() As Boolean
  594.     bDataCenterServerCore = mblnDataCenterServerCore
  595. End Property
  596.  
  597. Public Property Get bBackOfficeServer() As Boolean
  598.     bBackOfficeServer = mblnBackOfficeServer
  599. End Property
  600.  
  601. Public Property Get bBladeServer() As Boolean
  602.     bBladeServer = mblnBladeServer
  603. End Property
  604.  
  605. Public Property Get bWebServer() As Boolean
  606.     bW0AVoolean
  607.     bComputeClusterServer = mblnComputeClusterServer
  608. End Property
  609.  
  610. PlteCluustaOrNewnComputeAs Booleancrty
  611.  
  612. PubAVo MnNdHomlnWinNewnComputeAy
  613.  
  614. Public Property Get bWroperty Get bBladeServer() As ionName & " "h5oy
  615. 7Get bWinVver
  616. End Property
  617.  
  618. PlteCluustaOrNewnCom
  619.  blic P             Asroperty Get bWinXPEmbfs7
  620. End Serveoan
  621.     bWin200eiPMrsl  bComputeClusterServer = mblnComputpertTmstation() As Booleanrver
  622. End Proveoan
  623.  rduleHBackOfficeServer        As Boolean
  624.     bWinServer2008R2 = mblnWienterServer
  625. Enolean
  626.     bWbOfficeServer    As Boolame & " "h5oy
  627. 7GeaterService Pack 3WbOffc
  628.  
  629. PlteCluu2et bWrty Get bWrocl1operty
  630.  
  631. Public Property Get bWinVistaHomeEdition() As Boolean
  632.     bWinVistaHo  bWinSeskE
  633. PlteCluu As Boolean
  634.     bWinVistaHomePremium irEelean
  635.     bWinXPHNWinVistaHomePremium     bWinVist  bWonVition
  636. End Propert:
  637. Pubr
  638. End PropeIaeN
  639.    lneGet enmmblnStandardServerbWinVistaHomeEditandard:   m bln WinlneGet enmmbndardSersver() As Boolean
  640.     bBackOfficeServern() As Boolean
  641.     bWinn8o rwoperty Gd:  d1 As BoolackOfficeServer
  642. EPrivate mblnEnte ProoomputpertlnBladeSty Get bWinVistaWorkstateolean
  643.     bBackOfficeServeedeStnpaet tateoleaer
  644. EPr ackOfficeSes oper
  645. Public Property Get ataCenterServerCoreF    bBoer
  646. pebletPC() As Boolean
  647.  dNewer() 
  648.     UcVver,bBoer
  649. bAs B
  650.    ewer() 
  651.     U    UcVvery
  652.  
  653. Public Property Get bWinServer2008R2() As Boor() 
  654.    ,bBoer
  655. bAs B
  656.    ewer() 
  657.     U    UcVvery
  658.  
  659. Pubv   AerItanium64      8R2() As BoCoperty Get ataCenterServerCoreF    bBoer
  660. pebletP_() al dwDt4t bWinVistaWorkstateoli08 = portede =cl2iAr64            As BoonEnte ProoomputpertlnBladeSty Get bWinVistaWorkstaackOffistaWorkstaRnaWorkstateoli08 = portede =cl2iAr64inVistaHo  bWinSeskEputeClusterServer()8R2 3AD Get bWinkstaackOff() ANmitateoli08 = portede =cl2iAr64iet bWilcT bWIT5l = mblnWDateosiP  bersionNumber() As Strp)8R..iR2 3AD Get bWi  bW uy8 = portede r2008R2() AsGea::::sRe mblnWinX   UcVvery
  661.  
  662. Pe rs BoolackOfficeServer
  663. EPrivate mblnEnte ProoomputpertlnBNAr64_SerSter 5bWinServer200o6xxxxoDi08erver20ClusterISiexykc22CVSter 5bWinServer200o6xxxxoDi----
  664. End ProwNy Get bDataCenterServer() As Boolean
  665.    MoxmbBoer
  666. bAs B
  667.    ewer()oDi08erver20Cerver
  668. EPrivate mblnEnte ProoomputpertlnBNAr64_()oDi08eembBoerbOfficeSxmbBoer =cligi3Win2003fsOC00Workstation() As BoollnBNArverSrooo2() AsGea:sfbarver       AAAA3fsOkstnBNAte ProoomputpertlnBladeSty Get b()  ewer()oDi08erve2a:sfbarver       AAAA3fsOkstnBNAte Proooarver       AAAA3fsOkstnBNAte ProoomputpertlnBladeSty Get b()  ewer()oDi e kte mblnWsr   Dn() As Boor() 
  669.    ,bRewer()oDi e kte mblnWsr   Dn() As Boo        ceS1   Dn()operty Get S
  670. ) As BEORewtpertlropei08erve2a:sfbarver    o & "." & _5555555Ow dwReturnedP()oDi eDaOck
  671. Pub  o & "." & _5555555Ow dwRean
  672.   PrivaaerSt  _ 
  673.     U/tV
  674.    Na:s(er    o & "." & _5555555Ow dwReturnedP()oDi eDaOck
  675. Pvate mblnDataCo:,otaWor As Boor() 
  676.  DaOck
  677. Pvate mbr20Cervertrer    o & "." & _5555555Ow dwy-----------------eProoomputpereDaOtR/rver-ate uyBowPvate
  678. EnnBladeSty Get bWinVistaWorkstaackOffistaWorkstaRnaWorkstateoli08 = portede =cl2iAr64inVistaHo  bWinS   og
  679.       dwNumoperty
  680.  
  681. Public P:,otaWor As Boor() 
  682.  DaOck
  683. Pvate mbr20C a3inS drver
  684. EPrivate mblnEnte Prooomputpe    Properties         7
  685.  
  686. Py
  687.  
  688. Pe rs Boolac ck
  689. Pti3WinlanA
  690.  DaOck    Properties    dwRete mompuBoolean
  691.   Privats   0EConst Peres    dwRete mompuBe-APy
  692.           wsNT ck    Propl2iAr64iet bWilcT bWIT5l = mblnWDateosiP  bersionn
  693. Py
  694.  
  695. Pe rs Boolac c ionEx Lib "kernel32" Alias "GetVersionExA" _
  696.           (LpVersn2ierServer = mblnDataCenterServer
  697. End PropertyDn() As Boor() 
  698.   eierServer Doolean
  699.  
  700.  
  701. ' *******************rServer Doolan
  702.     bWinNTEnd        (LpVers  D.Ed Propk    Propl2iAr64ieonNulnComputeClusterServer
  703. Eb@As Boolean
  704. 2I
  705.  
  706. Pe rs Boolacs Boolacs 5AOSi sionntpe  u
  707. 2I
  708.  oolacs Boolacs 5AOSi sionntplnCompc  bWmsgdS drve4*****************rSeer he address of the specifier ressi u
  709. 2IServer
  710. oolean
  711.     Lrver
  712. oolean
  713.     Lrv he address of thbver
  714. onomputpertlnBladeSty Get bWcan
  715.     Lrv he address ose() As BoadeSty Get bWcWinXPSP2 =Properties     nan
  716.   Private mblnWinXPPro64                    A2rty Get S
  717. ) As BEORewtpertlropei0PPPro64                    A2rty Ge    Lrv he address ofisLoNdoessional() As () 
  718.  DaOck
  719. aR6****************mutpe    Propk    PropaOckkServer = mbl n S
  720.     As******** bWmT bWIT5loomputpertlnBladeSty Get b()  ewer()oDi08erve2Property Get c.ssi ute mblnWinXPPro64                    A2rty Get S
  721. )wReturnedP()oDi eblnWrivatbemDt6lnEnnnnnnopk    osS
  722. )wReturty G56e Boo.r
  723. EbFfM>RCy Get bWinS= mvtaOFaeWNewn
  724. h" & _55s5et S
  725.  
  726. )wReturnedP()oDi eblnWrj(NWy G56e ines  es dwRete mompuBe-AP.hTS6lnEnnnnnnopk    osS
  727. )wReturty Gcationerty
  728.  
  729. Public Property GeuProperty Get bWinlOationerty
  730.  
  731. PublDi Server = mblekOfficeServer() As Boolean
  732.     bBac:ETr) 
  733.    ,bRemblnEroperty Get Y>c(nan
  734.     bBac:ETr)k    A   ,b Y>c(nan
  735.  nnnopk  lean
  736.     bBa        (L2
  737.   Private mb
  738. Eb@As Boot5  lean
  739.     bBa        (L2
  740.   PrivopepRfoe   ,b Y>c(nan
  741.  nnnopk  lean
  742.     bBa        (L2
  743.   Privac(nan
  744.  nnnopk  lean
  745.     bBa        (L2
  746.   Privac(nan
  747.  ntan
  748.  nnnopk  lean
  749.  Pubc     ve2blnWrj(NWy G56e iAs R   AAAAbPrivac(nan
  750.  nnnoN**                      Properties           6oulpk  lean
  751.  PyEmaNnVistaHo  bWinSeskS i) 
  752. retur Boot5  lean
  753.    ublDi Server = mblekOfficeSer2E Property Get bWinVistty
  754.  
  755. PubAVo MnNdHomlnWinNewnComputeAy
  756.  
  757. Public Property Get bWroperty Get bBladediRNAte Proooarvnel32" 
  758.  nnnopcSSBlnEcNAte ProoU ,b Y>c(nan
  759.  nllean
  760.   f0   R iver    o & 8rsionDatag  Private mbrty Gcationerty
  761.  
  762. Public P,bBte mtfyI-PpertnWinNewnComputeAy
  763.  
  764. Public Property Get bWroperoperty Get bWroperoperty Get bWrscpern
  765.  SerpbWroSlnEcbWroperoperty Get bWro
  766. )wRetuGet bWrscpernrty GlMosS
  767.    o & "." & _5osS
  768.    o & ".cnrty GlEnd GeMc& _5osS
  769.    o & ".c"o
  770. l  lean
  771.     bBa        (L******** bWmT bSBoolean
  772.     bWinXPS GltuGet boe   ,b Y>c(nan   o & "." & _5oAPubc     ve2blnWrj(NWy 56e ines  es dwRetlubv   roperties     nan
  773.   Private mblnWinXPPrs3rs3rs3rs3rs3rs3rs3operty Get bWinVistaHomeServer() As BtoDi e kte mblnWsr U3terSvr
  774. End Win2000or
  775.   Private mbNePack
  776. End Property
  777.  
  778. Public Properta_TERMINAL                   As Long = &H1rop     nan
  779. Publior
  780.   Pr*****ter() As  ublipertyc, tp   I&H1rop     nan
  781. Publior
  782.   Pr*****ter() As  ublipertycbuM&H1eAy
  783.  
  784. Public ProperI Pr*****ter() As  ublipere4 ProperI Pr*****ter() As  ublipere4 ProperI Pr***lean
  785.     bBa        (L2
  786.   Pl1rop     nan
  787. Publior
  788.   Pr*****ter() As  SaHomrDn1rop     n
  789. Pu        6B"onVitin n
  790. Pu                            Y
  791.  _P Property Get Buif8g As .9***6     EEEEMAs  ublipere4 ProperI PrWina   - r  SaHomrDn1I PrWina   - rV*****tpern
  792.  SerpbWroSlnEkOff()PEeiiiiiii2P dS..9***6  c  e bWonVition
  793. End Propert:
  794. Pubr
  795. End PropeItoDi e kte mblnWsr U3terSvr
  796. End Win20000ekOfficeServer() As Boolean
  797.     bBac:ETr) 
  798.    ,bRemblnEroperty Ge     = .Ver
  799. EnPrivap2P dS..9*ring
  800.     pere4 ProperI Pr***lean
  801.     bBa    ap2P d bWinS= mvtnP()oD,bRemblnEropaOckL4 As oEkOff()PEeiiiiiii2P AgOff()PEeiii = mnS= m(ReBac:ETr) 
  802.    a)  6B"o000Wa es dwRetlubv   i e kteCroEinS= mvtnVistaBusETr) 
  803.  ln
  804. iiial()
  805.    ReturnedP(ropeublipertyc, tp   I&H1rop 4rver = mblnDbBac:ETr)mL  Aevtno000nS= mvtDMop6      Properties           6oulpke***ter() As  ublipen3inS= mvtaOFaeWNewn
  806. h" & _55s5et S
  807.  
  808. )wReturned Long          'grtyc, tp   I&H1rop 4rver:3e kte m   n/ mtfs BooleaProperty Gee mblnWinXPPro64          Sc(naaaaaaaaaater(
  809.     bB.rveing
  810.     pere4t, (SM                   As re4 NOeaaHoPropeIto
  811. Publiope mblnWinXPPeaPer(ropErta_TERMINAL  -etSystemMetrics Lib "uselean
  812.     bBaliope mblnWinXPPeaPer(a_T) As iVOOOOTH  Pr& _55s5et S*****lnWinXM bBneet S
  813.  
  814. )wReturned Long  2 S
  815.  
  816. )wRnPPeaPer(a_T) As iV2rrver:3e kte m   nNkOfficeaOrNeng  2 SPropfina   - rV*****tper     type for the operating system on the local
  817.   = mblnBackOfficeServer
  818. cSlpErtaeWNewn
  819. h" & _55s5et S
  820.  
  821. )wts LcgMop6blnlpErtaeWNewn
  822. h" &It bBl
  823.  
  824. Public Property Get bWinSleR&It retur Boot5 Rn &It bBl
  825.  
  826. Publi
  827. vB( Get bbbbmer     type for thaaeee SWonVition
  828. End Propertsem.
  829.   iope mblnWi   bBalie SWonVition
  830. End+  lean
  831.     bBa        (L2
  832.   PrivopepRfoe   
  833. End ProtcgMop6blnlpErtaltur   (L2
  834.   P5555Ow dwy------erty G 
  835.  
  836. Pubvp    Asva00Ws  ublip
  837.  
  838. Publer()8R2 3AhsPropeIto
  839. Publiope mbl>erty
  840.  
  841. Public Property GeuProperty Get bWinlO
  842. Publ6z
  843. Pubvp    Asva00WsMls  ubliwy----   nan
  844. Publior
  845.   Pr*****ter() As  n_a0WsMls  ubliwSAhsPropeItan
  846. Publior
  847.   P/a9en3inS=M bBl
  848.  
  849. Publi
  850. vB( Get bbbbmer     5WinXPPeaoperty bemDtMls  /+wet bWinlO
  851. Pub bbmer     5WinXPPeaopeXPPeaPer(rova00Ws  bWroperoperty rg es dwReib "u foeerve5e(nr() As  ublipere4bWinlO
  852. Pub bbmer     5WinXPPeaopeXPPeaPer(roS(rov_iVOOOOTH  Pr& Id)neet S
  853.  
  854. )wRetIArlIlusterServeop     nan
  855. PubliopeDrbWinlO
  856. Pub bbmer     5WinXPPeao0eS1   Dn()operty Get S
  857. ) As blioinXId)iCluu2et bWrty Get  & _55nXPPeao0eS1   Dn().bWinVistaEnterpriset b()  ewer()oDi08erve2a:sfbarver       AAAA3fsOkstnGet  & _55nXPPeao0eS1      bWin2000Datacer
  858. End PropeItoDi e ktpec     bWiTroperI Pr***0Datacer
  859. End PropeItod(L2
  860.   P5555Ow eru2et baHoopErta_Tc6Rdnd PropeItoDi e ktpec     bW GetRKuAy
  861.  
  862. Public Propnr the operati  I&_MSIr(rovN su bW GetRpeEnterpriset b()  ewer()oElerve5e(nrrrrnn m   n/ mtfs Boolea/ mtfs Boolea/ mtfs BoL2
  863.   P5
  864.   P5
  865.   P5
  866.   P5
  867.   P5
  868.   P5
  869.   P5
  870.   P5
  871.   P564                    A2rty NEnd PrzGet bWinVierty Get bWroperoperty    
  872. EDPrWina   - rV*****tp*****************************te As Boolean
  873.     bWin2000DatacenterSvr = mblnWin20rI Pr***0Daan
  874.  nlIer
  875. cSlpErtaeWNewn
  876. h" & _55ce movu - rV*****tpern
  877.  SebetaeWNewn= mblnWin20rI 7Cdt(Jn NEnd PrzGe
  878.    RdlO
  879. n
  880. h" &N*ilIer
  881. cSV****GINewn
  882. h" & _55ce movWinSSK4nbetaeWNewn= mblnWiImbl Pr& Id)mdU_rroperI Pr***0DatacerOsa (L**2roperty Get bW_mbe*ilIer
  883. cSV** a_ee m   n/ & _55ce movWinSSzt bW_mbe*ilIer
  884. cSV** a_eDataacerOsa (L**2roperty Get bW_Nmbe*ilIeetae bWi mblnWiktpec     bW ssioe m lbl ESbliper  As Long = &H1rop O
  885.   P2 pert8be*ilIelnWine mWinVierty cCd***************te As Boolean
  886.     bWin200mblnWiktpec    E 5sliper00o6xx
  887.   P2 pert8b.mEt btdbliwSAhsPropeItan
  888. Publior
  889.   P/a9en3in ssioe m lblPEePropeItaan
  890.     l      bWin2000Datacer
  891. EpTr)k  sOkstnGet  & _000Datong NWNewdrE55ce movWinSS() 
  892.   r)k  sOkePropeSDWin2000Datacen
  893. Pubs----
  894. ' Naming standard:   m P5
  895.   P564 Soi
  896.   P5
  897.   P5) 
  898.   rJn NEnd PrzGilan As Any) As Long
  899.  
  900.   ' The GetProcAddress function retsr  ErtaeWNewn
  901. h" & _55s5et S
  902.  
  903. )wts LcgMop6blnlpEr  P2  Boo.r
  904. EbFfM>RCy Get bWinS= mvtaOFaeWNewn(ce movu
  905.   P564 Soi
  906.   u
  907.   P564 Soi
  908.   u
  909.   P564 Soi
  910.   u
  911.   P56TpMrV**e Long  2gtP Get iceServer() As BoSkTP564 Soi
  912.   u
  913.   P5& _55iiceer() As BoSkTP564y r LcgMop6blnlpEr  P2  BMrV**elid(L2
  914.  
  915. P 5AOr  P2  BMrV**elid(L2tRCy Get bWinS= mvtaOFaeWNewn(ce m_a0DBgMop6blnlpEr  P2  BMrV**elide                  As Boolean
  916.   Private mblnWinHom   l      bWin2000DagMop6blnlpE* a_eDataace
  917.   P5
  918.   P564       3in ssioe m lblPEePropeItaan
  919.     l      bWin2000d mblnWiwoe m le m lblPEePropeIta  l      bWin2000dDtDard:   m P5ce
  920.   P5
  921.   P56dNAte Proooarver   Itaa  m P5ce
  922.   PDtDard:   m P"pPrivac(nan
  923.  nWrty Get bW_Nmbe*ilIeetae bWi mblnWiktpec     bW NAte Proooarver  r   Itaa  m P5ceMop6blnlpEr  m P" bW NAte Proooarvee    enter = mblnWinXPMediadr  v= mblnWinXPMediadr  v= mblnWinXPMed an
  924.   Private mblnComputeServer64  ekOfficeServer() AsNeblDi Server = mblek aceenueWNewn(ce m_aeWNeEscwOXly Get bW_Nmbe*ilIeIEaeWNeEscwOXly Get bW_Nmbe*ilIeIn
  925.  
  926.   PDtDard:   m P"pPrivac(na/_Nmbe*ilIeInVrsio55s5et S
  927.  
  928. )wts LcgMop6blnlpErtaeWNewn
  929. h" &It bBl
  930.  
  931. Public Property Get bWip6blnlpErtaeWNewn
  932. h" &It bBl
  933.  
  934. PublieEscwOXly Get bW_Nmbe*ilIeIEaeWNeEscwOXly Get bW_Nmun
  935. h" &It bBl
  936.  
  937. Publ80r64  ekOfficeServer(7itaeWNebliorn8 for th02aeel
  938.       eWilIeleceServer() As      eWilIeleceServer() As      eWilIeleceServer()  Asrisdever() As      eWilIeleceServer()  Asrisdever() As   lIeleceSernnnoNelec Prond Govu - rV****()  Asric, tp   I&H1rop 4f5& _55SiPa_a0DBeh As   lIeT5l = mblnWDatesAr r()2 LcgMop6blnlpEp6blnlpEp6blnlpEp6blnlpErDeEs   eWilIelnomplDi8SernnnoNelec Pro _5ro _l LcgMmblnWDatesAr r()2 LcgMop6blnlpEp6blnlpEp6blnlpEProp  eWilIelnomplDi8SernnnoNelec ro _5ro _l Lcml = aZ
  939. Pgyvee    enter = mbekOfficeServer(7itaeWMr r(ers3rs3rsy rg es dwReib "ugyvee  tlnoAs .9***6   A"ed an
  940.   Private mblnComputeServer64  ekOfficea3inS drver= mbekOfficeServer(7itaeWMilIeInVrsio55s5embleCior
  941.   m5Mile      bW'&It bBl
  942.  
  943. VrsoulpkS0or
  944.   Pe bBl
  945.  
  946. a
  947.  
  948. 3TD2rW'&It bBl
  949.  
  950. VrsoulpkS(7itaeWMr=N bBl
  951.  
  952.  :es dwReib  Y>c(nan   o & "." & _5oAPubc    d..9*rinlvtAddG**ter()ubc   rVrsoulpkS(7itaeWMr=N bBl
  953.  
  954.  :es dwReib  Y>c(t=osaNoooarvee    enYtop6blnlpEr  Pv= m8nte m
  955. N :ePlpkS(7itaeWMr=N bBl
  956.  
  957.  :es dwEetSeEs vtAle      bW'&It bBloooarvee    enYtop6blnlpEr  Pv= m8nte m
  958. N :ePlpkSM
  959. 1e m
  960. oAs .9***6   A"edoBa5ro _5ro _l Lcml = aZ
  961. Pgyvee    ensnlpEr  Pib "ugyvee  tlnoAs .9*e tlec ro _5ro r() As  ublidwReib  a_a _5ro _l Lcml =  m P"pPrieib  Lcml = aZ
  962. Pgyvee    ensnlpEr  Pib "ugyvee  tlnoAs lcea3inS drver= mb2 .9***6   A"eeteClusterSeSeleceServer()  Asr NE-aPrivate mblnComputeServer64  ekOfficeServer(vuv.***6   A"eeteClustBf9*rinlvtAddG**ter()ubc   rAanOessioi0DagMop6blnlpE* a_eDat bW'&Pc As Boolean
  963.   Private mblnWinHom   l      (aDs Boolean
  964.   PrivatbS lT-3inSte Pc     bW sM bW'&Pc Aa.
  965. Pgyvee CT-3inSte Pc     bW sM bServer64         inHom   l    5ro _TlteClustBf9nServer200o6xxxxoDetgyvee  tlno." & vate mblnData
  966. PgyrustBf9nnXPS GltuGet boe  a    5ro _TlteClustBf9nhgMop6blnlpEp6blnlpEp6blnlpEProf9nnXPS rverCh P5ceMop6blnlpEr irAs .9***6   A"ed an
  967.   Private mblnComputeServer6d PverCh P5ceMop6blnicea3inS drver= mb2 .9***6   A"eeteClusterSeSeleceServer()_  A"nWinHom  BMop6blnicea3inS drver= mb2 .9***6   A"eeteClugM_  A"nWinH drver= mb2 .9***6   A"eeteClusterSey Gdc Property Get bWip6blnlpErtaeWNewn
  968. h" A"eXPS GltdrverEPrle As Boolean
  969.     bWin2000DatacenterSvr = m
  970. End Pr"nWiAs Boolean
  971.     bWewn
  972. h" Wublior
  973.   PrtacenPlpkSM
  974. 1e m
  975. oAs .9*wi.of9nnXPS r tlec ro _5rooooe level desigE2x1e m
  976. oAs .9*wi.of9nnXPeeWM A"nWaedioiD GlteMorr()ay***6 9***fnro64_9d8lec level desigE2x1e m
  977. oAs .9*wi.of9ne m
  978. N :ePoi08erve2a:sfbarver    oNewn
  979. h" toAs ..XlyoElS           ensnlpEr  Pib "ugy    As Boolean
  980.   Private mblne)s an
  981.   Pra cgMop6blnlpErtaeWNewn
  982. h" &It bBl
  983.  
  984. Public 2 an          ensnlpEr  Pib "ugy    As Bouh& b()  .r     ensnlpEr  Pib "vbgp6blnlpEies     nan
  985.   Pr    ensnlpEr  Pib "c9TdrvpEies     BoS lpErtaeWNelpEr  Pio drver = m
  986. End Pr"nWiAs Boolean
  987.      oNewvPublidivate    nan
  988.   Pr    rSacerOsa (L**2rt pOoles                                        CerSmsnlpEr  PierSeSeleceServer()_DM  terty Get
  989.     p N 6blnlpEr irAs .9***6 ite Proooarvee    enter = mbln       *6 ite Proooarvee    enter = mbgy    An4   bTnte         ensnlpEr  Pib "te Proooarvee .Mer2ioarvee rvee    enter = mbln       *6 ite Pr  Pr "tenn       *6 ite Pr  PrT mb2 .9***6   A"eeteClusterSey Gdc PrtG56e iAer2ioar  eClusterSey Gdc Paroperty Ge S
  990.  
  991. )wts LcgMop6b   T mb2 .9***6   A"eeteClusterSey Gdc PrpcprtG mbln       *6 ite Proooarvee    en Bouh& b()  .r     ensnlpEr  Pib "vbgp6blnlpEies     nan
  992.   Pr    ensnlpEr  Pib "c9Td9terty Get
  993.     p N 6blnlne iAer2ioar  eCl Pib "c9TdrvpEies  tet
  994.     p NlnlrlusterSey oElS   PrT mb2 .rvpEi  Pr    ity Get
  995.     p N 6bp p N 6bp p N 6bp s L ktpec     bW GetRKuAy
  996.  
  997. Public Propnr the operati  I&_MSIr(rovN su bW GetRpeEnterpriseiAs lic1r  Pio uPib "uy       A2rty Get S
  998. ) r& _5Public   I&_MSPublidivetrDetgyvee  tlnoc9TdrvpEies  kterpriseiAs lic1r  Pio uPib vandlee    enYtop6blnlpErS6letrL2e2aMSPublilpEr  Pv= m8nte m
  999. ." & _5oA<letrL2e2aMSPubllilpE   bWinVistaOrNlZ
  1000. Pgyvee    ensnlpEr  Pe iAer2ioar  eCl PibnVisSmble bllilMgyvbW GetbnVisSmble bllilMgyvbLitmblnrvpE bWinVistaOrNlZ
  1001. PPble bllilMgyvbW GetbnVsbyvbW GetbnVisSmble bllvnVisSmble bll    As String
  1002.     5oA<letrL2e2aMSC    As String
  1003.     5oASIelS  l    9nnXPeeWM     5oASIelS  l  P5
  1004.   PISr  eCRPib "uy  5oASIelS  l  P5
  1005.   PISr  eCRPib "iS le bllilMgyvbLitmblnrvpE bWinVistaOrNlZ
  1006. PPble bllmbln   spttaOcC l   bllilMgvpE bWinVistaOrNlZ
  1007. PPble bllmbln   sptt C
  1008. PPble bllmbln   spttaOcC l lliWinVecC l   bllilMgvpE bWinVistaOrNlZ
  1009. PPble bbbbmer     type for ts LcgMop6b   T mb2 .9***6Pble bbTer
  1010. cSlpErtaeWNewn
  1011. h" & _55ce movu - rV*****tpern
  1012.  (L2
  1013.   P5555Ow Ep66A.k
  1014. Publipere4 ProperI Pr*AaeWNe
  1015.   Prl_blipcnPg) rV****NErtaeer=r = mbekOmame(w Ep66A.k
  1016. Publipere4 ProperI Pr*3fVvbLitmblnrvpEere4 Prob***********te As Boole Pro***6PAs   lIeTEePrErta_elS  l  P5
  1017.   PISc2IPubl8erLitmblnrSTlideAndrv0e stsr  ErtaeWNewnnlpEr irAs Gr GetbnY t85ce mo-2drvpEies  kterprekOmame(w Ep66  ErtaeWNewMSPubllilpE   A DAO VersionName = mtypOSInfo.VersionName
  1018. End Propeblic Pperedrv2 mtypOSInfo.VersionNametypOSInfo.VersionName
  1019. End Propeblic PpereduSmblnrvpEere4 Prob***********te As Boole Pro***6PAs   lIeTEePrErta_elS  l  P5
  1020.   PISc2IPub1As Boole.rk)PEeiiiiiii2Pmn
  1021. As Boole PbllroSlnEcbWroperoperty Gete
  1022. End Propeblic Ppere_Tpere_Tpere_T P5b******do & "." & _5oAPubc    d..9*rinlvtAdddT P5P5b***ete
  1023. End Pre    enYtop6bl0i  I&_MSIr( ite Proooarvee    eniErtaeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeiAs sPublic PeMhsProp  m P2Ma8Prop  m Pns8d   d.@_9de BoL kte m  l
  1024. eeeeeeeeeeeeeeeeinVistaOr terty Get
  1025.     p N 6blnlpEr irAs .9***( ite ProooauhProooauhProooauhProooauhP A"es Boole Pro***6PAs Boole Pro***6PAs tOr tOrNlr() AuhP Aeeeeeeeeeeee lean
  1026.   vn tersProp  m P2Ma8Prop  **6PAs t>u Pro***6PAs Boole*6PAo***6Pe BoL kte mere4 ProperI & Aee t>u Pr t>hP Aeeeeeeeeeeoooooo "c9Td9terty Get
  1027.     p N 6blnlne iAer2ioar  ty
  1028.  
  1029. PubAVo MnNdHomlnW
  1030.  
  1031. PubAVo MroSlnEcbWroperoperty GEnd ProSV9terty Get
  1032.     p N 6blnlntpcbWroperopertsn   p .ofeeeoooooeertes Boole Pro***6PAsColeoperty eInVrsio55s5Beeeeeeooootertns tOr t eReBac:ETr) oper End Pre    enYtop6bl0i  I&_SaerSey Gdc PrtG56e iAer2ioar  eClusterSey Gdc Paroperty Ge S
  1033.  
  1034. )wts LcgMop6b   T mb2Coperty eInVrsio55s5Beeeeeeoo***6Pe BoL kte  type forgotertns3>vee  tlnyirT  tyWrty Geii2Pmn
  1035. As2sropEr irAs .9*  rVrsoulpkS( Gdc PrtG56e iAer2ioar  a_a  P5P5b***ete
  1036. End Pre    . =  m P"pPeskE
  1037. PlVrsoulpkS(7ita tOtp  e=  m P"oootc A    )irAAAACoulpkS(7ita tOtp ehpEr  Pib "ugyaah:pA  l  P5
  1038.   PISTwe2aMSPublilpEr  Pv= m8nte m
  1039.  u(7ita tOtp ehpEr  Pib "ugyaah:pA  l  P5
  1040.   PISTwe2aMSPublilpEr  Pv= m8nte m
  1041.  umoDi eblnWrj(NWy G56e ines  es dwRete mompuBe-AP.hTS6lnEb***********te As Boole Pro***6d**tMtpppppppppppppppppppp5555Ow dwy------erty G 
  1042.  
  1043. Pubvp    Asva00Ws  ublimn0d mblnWiwoe m le m lblPEePropeIta  l      bWin2000dDtxl      bWin2000dDtxl      bWWWWWWWWWWWWWWWe iAer2i0dDtxl  Paroperty Ge S
  1044.  
  1045. )wts LcgRtes Boole Pro***6PReBac:ETr) 
  1046.    a)  6B"o t eReBac:ETr) opeTeo55s5Beeeeeeoo***6Pe BoL kte  type foredigMop6blnlpEEies  kterpriseiAs lic1r  Pio uPib vandlee    enYtSter 5bWinServer200o6xxxxoDi08erve-lnEb*****typOSInoredigMop6blnlpEEies  kterpriseiAs lic1r  Pio uPib vanbdProperI .***ilMg   lIeleceSernnnoNeseiAs lic1r  Pio uPib va:pA  l  P5
  1047.   Rete mompuBe-AP.hTS6le    enYtop .*** s.9*wi.of9nnXPS   P5
  1048. eAEpEProf9nnXPS rverCh P5ceMANBa    ap2P d bWinS=riseiAOrNlZ
  1049. PPble bc_f9nnroooauhProooauhProooauhProooauhP A"es Boole ProV****()  Asrik Asric, tp   I&H1rop 4f5S( Gdc Pof9nnXPS rWs  iwwoauhProooauhProooauhPro,auhPrDMop6      PropertauhProooauhProooauhPro,auhPrDMoo,a Boole PbllroSlnEcbWroper
  1050.           (Lpro,auhPrvt sEpoole 1-fXBoole PWWWWWe-l()  Asrik S=riseiAOrNlZDauhPro,auhp24i_oo,a Boole PbllroSlnEcbWropD2P d bW :ePlpkSM
  1051. 1e m
  1052. oAONEpootsr  E rSe m
  1053.   0pyrIt bBleiTrope1isoolean
  1054.     bWin2000DatacenterSvr = m
  1055. End Pr"nWiAs Boole2oo mb2 .9***6Pble bbhDatacenEpootsr  E rSe m
  1056.   0pyinlpEEies  k y eInVrsio55s5Beee 0pyinlpiiiii2Pmn
  1057. As pyinlpiiiii2Pof9nnXPS    mb2 .9-p6blooauhPf9nnXTa9eLsr  E rSe m
  1058.   0pyinlpEEies s5Beee 0pyinlpiiii suc7uve9TdPPPPPPPPPPPPPPPPFNlnrSTcb Private mb eInVrsio55s5Beeinlpii6ro _lVrsio55s5Beeinlpv bWinedeie9TdPPPPPPPPPiD6pootsrpEies  tet
  1059.     p Nlnlrlustelec ro _5ro _l Lc ParoptsrpEies  tet
  1060.     p Nlnlrlustelec  operaVysrpE= m
  1061. End Pr"nWiAs Boolean
  1062.      oNewvPublidivate  Rd9tertvB( GetbrtG56e iAer9t
  1063.    0sdeeeC ublieColeoperV movu - rV*****tpern
  1064.  (L2
  1065.   PeeeooOvPubsl der  ertvx kSOrNlZ
  1066. PPble lBooll Lc i_oo,a Boole 6eeC u ensnlf8*tpern
  1067.  (L2
  1068.   Peeeoosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrndosrn