Page 1 sur 2

Plantage Domino sur Windows 2008

MessagePublié: 02 Oct 2012 à 10:16
par Scualito
Bonjour,

Je ne sais pas si je poste au bon endroit, donc je m'excuse d'avance si ce n'est pas le cas.

Voici mon problème...
Je fais planter violemment Domino sur un Windows 2008 64 bits (et 32 bits aussi, à priori)... Quand je dis violemment, c'est violent car c'est de l’instantané !
J'ai repéré la ligne qui génère le plantage.
En fait, c'est dans une fonction récupérant l'adresse ip de la machine courante. Elle a été récupéré sur Internet (notes.net probablement) il y a des années et n'a jamais posé de soucis.

Voici les déclarations :

Code : Tout sélectionner
Type HOSTENT
   hName As Long
   hAliases As Long
   hAddrType As Integer
   hLen As Integer
   hAddrList As Long
End Type
Type WSADATA
   wVersion As Integer
   wHighVersion As Integer
   szDescription(0 To MAX_WSADescription) As Long
   szSystemStatus(0 To MAX_WSASYSStatus) As Long
   wMaxSockets As Integer
   wMaxUDPDG As Integer
   dwVendorInfo As Long
End Type

Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
Declare Function WSAStartup Lib "WSOCK32.DLL" (Byval wVersionRequired As Long, lpWSADATA As WSADATA) As Long
Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
Declare Function gethostname Lib "WSOCK32.DLL" (Byval szHost As String, Byval dwHostLen As Long) As Long
Declare Function gethostbyname Lib "WSOCK32.DLL" (Byval szHost As String) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, Byval hpvSource As Long, Byval cbCopy As Long)

Const MAX_WSADescription = 256
Const MAX_WSASYSStatus = 128
Const ERROR_SUCCESS = 0
Const WS_VERSION_REQD = &H101
Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&
Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&
Const MIN_SOCKETS_REQD = 1
Const SOCKET_ERROR = -1


Voici le code (épuré) :

Code : Tout sélectionner
Function GetIPAddress() As String
   
   Dim sHostName As String * 256
   Dim lpHost As Long
   Dim HOST As HOSTENT
   Dim dwIPAddr As Long
   Dim tmpIPAddr() As Long
   Dim i As Integer
   Dim sIPAddr As String
   
   Dim sess As New NotesSession
   Dim db As NotesDatabase
   Set db = sess.currentDatabase
   
   On Error Goto fin
   
      
   If Not SocketsInitialize() Then
      GetIPAddress = ""
      Exit Function
   End If
   
   If gethostname(sHostName, 256) = SOCKET_ERROR Then
      GetIPAddress = ""
      Msgbox "Windows Sockets error " & Str$(WSAGetLastError()) & _
      " has occurred. Unable to successfully get Host Name."
      SocketsCleanup
      Exit Function
   End If
   
   sHostName = Trim$(sHostName)
   lpHost = gethostbyname(sHostName)
   
   If lpHost = 0 Then
      GetIPAddress = ""
      Msgbox "Windows Sockets are not responding. " & _
      "Unable to successfully get Host Name."
      SocketsCleanup
      Exit Function
   End If
   
   CopyMemory HOST, lpHost, Len(HOST)
   CopyMemory dwIPAddr, HOST.hAddrList, 4
   
   Redim tmpIPAddr(1 To HOST.hLen)
   CopyMemory tmpIPAddr(1), dwIPAddr, 4
   
   sIPAddr = Hex$(sIPAddr & tmpIPAddr(1))
   
   Dim Address_IP As String
   Address_IP = HextoDec(sIPAddr)
   
   GetIPAddress = Address_IP
   SocketsCleanup
   
   Exit Function
fin :   
   Msgbox db.filepath +  " GetIpAdress : " + Str$(Err) + " ( ligne "+ Str$(Erl) + " ):" + Error
   Exit Function   
   
End Function


Et la ligne qui provoque le plantage :

Code : Tout sélectionner
   CopyMemory dwIPAddr, HOST.hAddrList, 4


Via des msgbox, je peux dire que dwIPAddr=0 et que HOST.hAddrList=0
alors que sur Windows 2003, dwIPAddr=0 et que HOST.hAddrList=12521520 (chiffre mis au hasard).
Donc, je pense que la question est pourquoi HOST.hAddrList=0 sur un Windows 2008 64 bits (ou 32 bits)...

Est-ce que quelqu'un aurait une idée pour résoudre ce (gros) problème...
Un grand merci d'avance pour toute l'aide qui pourra nous être apportée...

Re: Plantage Domino sur Windows 2008

MessagePublié: 02 Oct 2012 à 10:28
par Michael DELIQUE
Hello Scualito

malheureusement les API sont connu pour faire planter les server (et les clients) car tout un partie de la gestion des threads et de la mémoire est zapé.

va falloir faire autrement

Re: Plantage Domino sur Windows 2008

MessagePublié: 02 Oct 2012 à 10:35
par Michael DELIQUE
regarde par là si tu peux pas récupérer l'ip => http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Re: Plantage Domino sur Windows 2008

MessagePublié: 02 Oct 2012 à 10:40
par Michael DELIQUE
regarde la partie win32_Network

Re: Plantage Domino sur Windows 2008

MessagePublié: 02 Oct 2012 à 10:59
par Scualito
Michael DELIQUE a écrit:va falloir faire autrement


Je veux bien, pourquoi pas, mais tu as une idée de comment faire ?

Michael DELIQUE a écrit:regarde la partie win32_Network


J'ai regardé et....... :roll:

Re: Plantage Domino sur Windows 2008

MessagePublié: 02 Oct 2012 à 13:18
par roubech
tu as absolument besoin de l'IP ?
Sinon, tu peux récupérer le nom de la machine dans la variable d'environnement ComputerName

@Environment("ComputerName")
ou
environ("ComputerName")

Re: Plantage Domino sur Windows 2008

MessagePublié: 02 Oct 2012 à 13:55
par Scualito
roubech a écrit:tu as absolument besoin de l'IP ?


Oui, car c'est pour former une url en cas d'absence de nom de domaine...
Le contexte est un peu compliqué à expliquer, mais si on a pas de nom de domaine on doit prendre l'IP pour former l'url vers le serveur.

Re: Plantage Domino sur Windows 2008

MessagePublié: 02 Oct 2012 à 14:07
par Michael DELIQUE
tu peux pas faire un ipconfig récupérer le résultat et en parser l'ip ?

Re: Plantage Domino sur Windows 2008

MessagePublié: 03 Oct 2012 à 13:22
par roubech
une URL ? c'est l'IP du serveur courant qu'il te faut ? si oui, elle ne doit pas changer souvent. Il ne serait pas plus simple de la paramétrer quelque part ?
sinon, au niveau domino, dans le doc serveur ou le doc site, il doit y avoir un paramètre hostname ....

Re: Plantage Domino sur Windows 2008

MessagePublié: 03 Oct 2012 à 14:23
par Scualito
roubech a écrit:Il ne serait pas plus simple de la paramétrer quelque part ?


J'y avais déjà pensé, mais le problème est que l'on ne maitrise pas tous les serveurs sur lesquels notre soft est installé et donc on a pas trop envie qu'un mauvais paramétrage fasse planter les serveurs chez des clients.
Je pense qu'on finira au pire par mettre en place ce paramétrage mais bon... en désespoir de cause.

Je vais regarder aussi si je peux récupérer l'info dans le document serveur comme proposé... Mais là-aussi, le risque de plantage existera aussi sur un serveur mal paramétré...

Merci pour les idées !

Re: Plantage Domino sur Windows 2008

MessagePublié: 03 Oct 2012 à 14:32
par Michael DELIQUE
c'est pas enregistré dans la base de registre cette info ?

Re: Plantage Domino sur Windows 2008

MessagePublié: 03 Oct 2012 à 14:37
par Michael DELIQUE
ya peut être une solution en passant par du java.

tu appeller des fonction java en LS ça pourrait le faire.

j'ai trouvé http://blog.developpez.com/ddelbecq/p87 ... la_machine
et ça http://exampledepot.com/egs/java.net/Local.html

Re: Plantage Domino sur Windows 2008

MessagePublié: 03 Oct 2012 à 21:20
par roubech
Je pensais qu'il s'agissait d'une appli perso et que tu avais la maîtrise de l'environnement. Mais si c'est un "produit", ce n'est pas le cas. Je prevoirai quand même la possibilité de paramétrer la base de l'URL, ne serait ce que pour gérer le cas où le Domino est en cluster et derrière un reverse proxy ... un peu comme les options de iwaredir

Re: Plantage Domino sur Windows 2008

MessagePublié: 04 Oct 2012 à 09:36
par Scualito
Bon, il a finalement été décidé de créer un paramétrage pour indiquer l'IP du serveur et de forcer l'utilisation de ce paramétrage pour les serveurs Windows 2008.
En fait, il existe déjà ce paramétrage mais il était obligatoire uniquement pour les machines AIX. Donc, on va le généraliser.

Merci en tout cas pour toutes vos réponses ! :wink:

D'ailleurs, en passant, quelqu'un aurait un code pour déterminer la version de Windows sur lequel tourne le serveur ?
J'ai bien essayé NotesSession.PlatForm mais sur 2003 et 2008, ca me donne "Windows/32"

Quelqu'un a une idée ?? Merci....

Re: Plantage Domino sur Windows 2008

MessagePublié: 04 Oct 2012 à 09:42
par Michael DELIQUE
re essais ça

Code : Tout sélectionner
Public Function WindowsOSInfo() As Variant
   Dim lstRetour List As String
   Dim vrObject As Variant
   Dim nbOk As Boolean
   Const Computer = "."
   On Error GoTo ErreurHandle
   
   lstRetour("BOOTDEVICE") = ""
   lstRetour("BUILDNUMBER") = ""
   lstRetour("BUILDTYPE") = ""
   lstRetour("CAPTION") = ""
   lstRetour("CODESET") = ""
   lstRetour("COUNTRYCODE") = ""
   lstRetour("CREATIONCLASSNAME") = ""
   lstRetour("CSCREATIONCLASSNAME") = ""
   lstRetour("CSDVERSION") = ""
   lstRetour("CSNAME") = ""
   lstRetour("CURRENTTIMEZONE") = ""
   lstRetour("DATAEXECUTIONPREVENTION_AVAILABLE") = ""
   rem   lstRetour("DATAEXECUTIONPREVENTION_32BITAPPLICATION") = ""
   lstRetour("DATAEXECUTIONPREVENTION_DRIVERS") = ""
   lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICY") = ""
   lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICYNAME") = ""
   lstRetour("DEBUG") = ""
   lstRetour("DESCRIPTION") = ""
   lstRetour("DISTRIBUTED") = ""
   lstRetour("ENCRYPTIONLEVEL") = ""
   lstRetour("FOREGROUNDAPPLICATIONBOOST") = ""
   lstRetour("FOREGROUNDAPPLICATIONBOOSTNAME") = ""
   lstRetour("FREEPHYSICALMEMORY") = ""
   lstRetour("FREESPACEINPAGINGFILES") = ""
   lstRetour("FREEVIRTUALMEMORY") = ""
   lstRetour("INSTALLDATE") = ""
   lstRetour("LARGESYSTEMCACHE") = ""
   lstRetour("LARGESYSTEMCACHENAME") = ""
   lstRetour("LASTBOOTUPTIME") = ""
   lstRetour("LOCALDATETIME") = ""
   lstRetour("LOCALE") = ""
   lstRetour("MANUFACTURER") = ""
   lstRetour("MAXNUMBEROFPROCESSES") = ""
   lstRetour("MAXPROCESSMEMORYSIZE") = ""
   lstRetour("MUILANGUAGES") = ""
   lstRetour("NAME") = ""
   lstRetour("NUMBEROFLICENSEDUSERS") = ""
   lstRetour("NUMBEROFPROCESSES") = ""
   lstRetour("NUMBERSOFUSERS") = ""
   lstRetour("OPERATINGSYSTEMSKU") = ""
   lstRetour("OPERATINGSYSTEMSKUNAME") = ""
   lstRetour("ORGANIZATION") = ""
   lstRetour("OSARCHITECTURE") = ""
   lstRetour("OSLANGUAGE") = ""
   lstRetour("OSLANGUAGENAME") = ""
   lstRetour("OSPRODUCTSUITE") = ""
   lstRetour("OSPRODUCTSUITENAME") = ""
   lstRetour("OSTYPE") = ""
   lstRetour("OSTYPENAME") = ""
   lstRetour("OTHERTYPEDESCRIPTION") = ""
   lstRetour("PAEENABLED") = ""
   lstRetour("PLUSPRODUCTID") = ""
   lstRetour("PLUSVERSIONNUMBER") = ""
   lstRetour("PRIMARY") = ""
   lstRetour("PRODUCTTYPE") = ""
   lstRetour("PRODUCTTYPENAME") = ""
   lstRetour("REGISTEREDUSER") = ""
   lstRetour("SERIALNUMBER") = ""
   lstRetour("SERVICEPACKMAJORVERSION") = ""
   lstRetour("SERVICEPACKMINORVERSION") = ""
   lstRetour("SIZESTOREDINPAGINGFILES") = ""
   lstRetour("STATUS") = ""
   lstRetour("SUITEMASK") = ""
   lstRetour("SUITEMASKNAME") = ""
   lstRetour("SYSTEMDEVICE") = ""
   lstRetour("SYSTEMDIRECTORY") = ""
   lstRetour("SYSTEMDRIVE") = ""
   lstRetour("TOTALSWAPSPACESIZE") = ""
   lstRetour("TOTALVIRTUALMEMORYSIZE") = ""
   lstRetour("TOTALVISIBLEMEMORYSIZE") = ""
   lstRetour("VERSION") = ""
   lstRetour("WINDOWSDIRECTORY") = ""

   Set vrObject = GetObject("WinMgmts:{impersonationLevel=impersonate, authenticationLevel=connect, (security)}!\\" +Computer + "\root\CIMv2").ExecQuery("Select * from Win32_OperatingSystem")
   nbOk = false
   ForAll value In vrObject
      nbOk = true
      On Error Resume Next
      lstRetour("BOOTDEVICE") = CStr(value.BootDevice)
      lstRetour("BUILDNUMBER") = CStr(value.BuildNumber)
      lstRetour("BUILDTYPE") = CStr(value.BuildType)
      lstRetour("CAPTION") = CStr(value.Caption)
      lstRetour("CODESET") = CStr(value.CodeSet)
      lstRetour("COUNTRYCODE") = CStr(value.CountryCode)
      lstRetour("CREATIONCLASSNAME") = CStr(value.CreationClassName)
      lstRetour("CSCREATIONCLASSNAME") = CStr(value.CSCreationClassName)
      lstRetour("CSDVERSION") = CStr(value.CSDVersion)
      lstRetour("CSNAME") = CStr(value.CSName)
      lstRetour("CURRENTTIMEZONE") = CStr(value.CurrentTimeZone)
      lstRetour("DATAEXECUTIONPREVENTION_AVAILABLE") = CStr(value.DataExecutionPrevention_Available)
      rem   lstRetour("DATAEXECUTIONPREVENTION_32BITAPPLICATION") = CStr(value.DataExecutionPrevention_32BitApplications)
      lstRetour("DATAEXECUTIONPREVENTION_DRIVERS") = CStr(value.DataExecutionPrevention_Drivers)
      lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICY") = CStr(value.DataExecutionPrevention_SupportPolicy)
      lstRetour("DEBUG") = CStr(value.Debug)
      lstRetour("DESCRIPTION") = CStr(value.Description)
      lstRetour("DISTRIBUTED") = CStr(value.Distributed)
      lstRetour("ENCRYPTIONLEVEL") = CStr(value.EncryptionLevel)
      lstRetour("FOREGROUNDAPPLICATIONBOOST") = CStr(value.ForegroundApplicationBoost)
      lstRetour("FREEPHYSICALMEMORY") = CStr(value.FreePhysicalMemory)
      lstRetour("FREESPACEINPAGINGFILES") = CStr(value.FreeSpaceInPagingFiles)
      lstRetour("FREEVIRTUALMEMORY") = CStr(value.FreeVirtualMemory)
      lstRetour("INSTALLDATE") = CStr(value.InstallDate)
      lstRetour("LARGESYSTEMCACHE") = CStr(value.LargeSystemCache)
      lstRetour("LASTBOOTUPTIME") = CStr(value.LastBootUpTime)
      lstRetour("LOCALDATETIME") = CStr(value.LocalDateTime)
      lstRetour("LOCALE") = CStr(value.Locale)
      lstRetour("MANUFACTURER") = CStr(value.Manufacturer)
      lstRetour("MAXNUMBEROFPROCESSES") = CStr(value.MaxNumberOfProcesses)
      lstRetour("MAXPROCESSMEMORYSIZE") = CStr(value.MaxProcessMemorySize)
      lstRetour("MUILANGUAGES") = CStr(Join(value.MUILanguages,","))
      lstRetour("NAME") = CStr(value.Name)
      lstRetour("NUMBEROFLICENSEDUSERS") = CStr(value.NumberOfLicensedUsers)
      lstRetour("NUMBEROFPROCESSES") = CStr(value.NumberOfProcesses)
      lstRetour("NUMBERSOFUSERS") = CStr(value.NumberOfUsers)
      lstRetour("OPERATINGSYSTEMSKU") = CStr(value.OperatingSystemSKU)
      lstRetour("ORGANIZATION") = CStr(value.Organization)
      lstRetour("OSARCHITECTURE") = CStr(value.OSArchitecture)
      lstRetour("OSLANGUAGE") = CStr(value.OSLanguage)
      lstRetour("OSPRODUCTSUITE") = CStr(value.OSProductSuite)
      lstRetour("OSTYPE") = CStr(value.OSType)
      lstRetour("OTHERTYPEDESCRIPTION") = CStr(value.OtherTypeDescription)
      lstRetour("PAEENABLED") = CStr(value.PAEEnabled)
      lstRetour("PLUSPRODUCTID") = CStr(value.PlusProductID)
      lstRetour("PLUSVERSIONNUMBER") = CStr(value.PlusVersionNumber)
      lstRetour("PRIMARY") = CStr(value.Primary)
      lstRetour("PRODUCTTYPE") = CStr(value.ProductType)
      lstRetour("REGISTEREDUSER") = CStr(value.RegisteredUser)
      lstRetour("SERIALNUMBER") = CStr(value.SerialNumber)
      lstRetour("SERVICEPACKMAJORVERSION") = CStr(value.ServicePackMajorVersion)
      lstRetour("SERVICEPACKMINORVERSION") = CStr(value.ServicePackMinorVersion)
      lstRetour("SIZESTOREDINPAGINGFILES") = CStr(value.SizeStoredInPagingFiles)
      lstRetour("STATUS") = CStr(value.Status)
      lstRetour("SUITEMASK") = CStr(value.SuiteMask)
      lstRetour("SYSTEMDEVICE") = CStr(value.SystemDevice)
      lstRetour("SYSTEMDIRECTORY") = CStr(value.SystemDirectory)
      lstRetour("SYSTEMDRIVE") = CStr(value.SystemDrive)
      lstRetour("TOTALSWAPSPACESIZE") = CStr(value.TotalSwapSpaceSize)
      lstRetour("TOTALVIRTUALMEMORYSIZE") = CStr(value.TotalVirtualMemorySize)
      lstRetour("TOTALVISIBLEMEMORYSIZE") = CStr(value.TotalVisibleMemorySize)
      lstRetour("VERSION") = CStr(value.Version)
      lstRetour("WINDOWSDIRECTORY") = CStr(value.WindowsDirectory)
      On Error GoTo ErreurHandle
   End ForAll   
   Set vrObject = Nothing
   
   If nbOk = True then
      Select Case Trim(lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICY"))      
      Case "0"
         lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICYNAME") = "Always Off. DEP Is turned off For all 32-bit applications On the computer With no exceptions. This setting Is Not available For the user interface."
      Case "1"
         lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICYNAME") = "Always On. DEP Is enabled For all 32-bit applications On the computer. This setting Is Not available For the user interface."
      Case "2"
         lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICYNAME") = "Opt In. DEP Is enabled For a limited number of binaries, the kernel, And all Windows-based services. However, it Is off by default For all 32-bit applications. A user Or administrator must explicitly choose either the AlwaysOn Or the OptOut setting before DEP can be applied To 32-bit applications."
      Case "3"
         lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICYNAME") = "Opt Out. DEP Is enabled by default For all 32-bit applications. A user Or administrator can explicitly Remove support For a 32-bit application by adding the application To an exceptions list."
      Case Else
         REM lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICYNAME") = "UNKNOWN"
      End Select
      
      Select Case Trim(lstRetour("FOREGROUNDAPPLICATIONBOOSTN"))
      Case "0"   
         lstRetour("FOREGROUNDAPPLICATIONBOOSTNAME") = "None"
      Case "1"
         lstRetour("FOREGROUNDAPPLICATIONBOOSTNAME") = "Minimum"
      Case "2"
         lstRetour("FOREGROUNDAPPLICATIONBOOSTNAME") = "(Default) Maximum"      
      Case Else
         REM lstRetour("FOREGROUNDAPPLICATIONBOOSTNAME") = "UNKNOWN"
      End Select
      
      Select Case Trim(lstRetour("LARGESYSTEMCACHE"))
      Case "0"
         lstRetour("LARGESYSTEMCACHENAME") = "Optimize memory For applications."
      Case "1"
         lstRetour("LARGESYSTEMCACHENAME") = "Optimize memory For system performance."
      Case Else
         REM lstRetour("LARGESYSTEMCACHENAME") = "UNKNOWN"
      End Select
      
      Select Case Trim(lstRetour("OSLANGUAGE"))

      Case "1"
         lstRetour("OSLANGUAGENAME") = "Arabic"
      Case "4"
         lstRetour("OSLANGUAGENAME") = "Chinese (Simplified)– China"
      Case "9"
         lstRetour("OSLANGUAGENAME") = "English"
      Case "1025"
         lstRetour("OSLANGUAGENAME") = "Arabic – Saudi Arabia"
      Case "1026"
         lstRetour("OSLANGUAGENAME") = "Bulgarian"
      Case "1027"
         lstRetour("OSLANGUAGENAME") = "Catalan"
      Case "1028"
         lstRetour("OSLANGUAGENAME") = "Chinese (Traditional) – Taiwan"
      Case "1029"
         lstRetour("OSLANGUAGENAME") = "Czech"
      Case "1030"
         lstRetour("OSLANGUAGENAME") = "Danish"
      Case "1031"
         lstRetour("OSLANGUAGENAME") = "German – Germany"
      Case "1032"
         lstRetour("OSLANGUAGENAME") = "Greek"
      Case "1033"
         lstRetour("OSLANGUAGENAME") = "English – United States"
      Case "1034"
         lstRetour("OSLANGUAGENAME") = "Spanish – Traditional Sort"
      Case "1035"
         lstRetour("OSLANGUAGENAME") = "Finnish"
      Case "1036"
         lstRetour("OSLANGUAGENAME") = "French – France"
      Case "1037"
         lstRetour("OSLANGUAGENAME") = "Hebrew"
      Case "1038"
         lstRetour("OSLANGUAGENAME") = "Hungarian"
      Case "1039"
         lstRetour("OSLANGUAGENAME") = "Icelandic"
      Case "1040"
         lstRetour("OSLANGUAGENAME") = "Italian – Italy"
      Case "1041"
         lstRetour("OSLANGUAGENAME") = "Japanese"
      Case "1042"
         lstRetour("OSLANGUAGENAME") = "Korean"
      Case "1043"
         lstRetour("OSLANGUAGENAME") = "Dutch – Netherlands"
      Case "1044"
         lstRetour("OSLANGUAGENAME") = "Norwegian – Bokmal"
      Case "1045"
         lstRetour("OSLANGUAGENAME") = "Polish"
      Case "1046"
         lstRetour("OSLANGUAGENAME") = "Portuguese – Brazil"
      Case "1047"
         lstRetour("OSLANGUAGENAME") = "Rhaeto-Romanic"
      Case "1048"
         lstRetour("OSLANGUAGENAME") = "Romanian"
      Case "1049"
         lstRetour("OSLANGUAGENAME") = "Russian"
      Case "1050"
         lstRetour("OSLANGUAGENAME") = "Croatian"
      Case "1051"
         lstRetour("OSLANGUAGENAME") = "Slovak"
      Case "1052"
         lstRetour("OSLANGUAGENAME") = "Albanian"
      Case "1053"
         lstRetour("OSLANGUAGENAME") = "Swedish"
      Case "1054"
         lstRetour("OSLANGUAGENAME") = "Thai"
      Case "1055"
         lstRetour("OSLANGUAGENAME") = "Turkish"
      Case "1056"
         lstRetour("OSLANGUAGENAME") = "Urdu"
      Case "1057"
         lstRetour("OSLANGUAGENAME") = "Indonesian"
      Case "1058"
         lstRetour("OSLANGUAGENAME") = "Ukrainian"
      Case "1059"
         lstRetour("OSLANGUAGENAME") = "Belarusian"
      Case "1060"
         lstRetour("OSLANGUAGENAME") = "Slovenian"
      Case "1061"
         lstRetour("OSLANGUAGENAME") = "Estonian"
      Case "1062"
         lstRetour("OSLANGUAGENAME") = "Latvian"
      Case "1063"
         lstRetour("OSLANGUAGENAME") = "Lithuanian"
      Case "1065"
         lstRetour("OSLANGUAGENAME") = "Persian"
      Case "1066"
         lstRetour("OSLANGUAGENAME") = "Vietnamese"
      Case "1069"
         lstRetour("OSLANGUAGENAME") = "Basque"
      Case "1070"
         lstRetour("OSLANGUAGENAME") = "Serbian"
      Case "1071"
         lstRetour("OSLANGUAGENAME") = "Macedonian (F.Y.R.O. Macedonia)"
      Case "1072"
         lstRetour("OSLANGUAGENAME") = "Sutu"
      Case "1073"
         lstRetour("OSLANGUAGENAME") = "Tsonga"
      Case "1074"
         lstRetour("OSLANGUAGENAME") = "Tswana"
      Case "1076"
         lstRetour("OSLANGUAGENAME") = "Xhosa"
      Case "1077"
         lstRetour("OSLANGUAGENAME") = "Zulu"
      Case "1078"
         lstRetour("OSLANGUAGENAME") = "Afrikaans"
      Case "1080"
         lstRetour("OSLANGUAGENAME") = "Faeroese"
      Case "1081"
         lstRetour("OSLANGUAGENAME") = "Hindi"
      Case "1082"
         lstRetour("OSLANGUAGENAME") = "Maltese"
      Case "1084"
         lstRetour("OSLANGUAGENAME") = "Scottish Gaelic"
      Case "1085"
         lstRetour("OSLANGUAGENAME") = "Yiddish"
      Case "1086"
         lstRetour("OSLANGUAGENAME") = "Malay – Malaysia"
      Case "2049"
         lstRetour("OSLANGUAGENAME") = "Arabic – Iraq"
      Case "2052"
         lstRetour("OSLANGUAGENAME") = "Chinese (Simplified) – PRC"
      Case "2055"
         lstRetour("OSLANGUAGENAME") = "German – Switzerland"
      Case "2057"
         lstRetour("OSLANGUAGENAME") = "English – United Kingdom"
      Case "2058"
         lstRetour("OSLANGUAGENAME") = "Spanish – Mexico"
      Case "2060"
         lstRetour("OSLANGUAGENAME") = "French – Belgium"
      Case "2064"
         lstRetour("OSLANGUAGENAME") = "Italian – Switzerland"
      Case "2067"
         lstRetour("OSLANGUAGENAME") = "Dutch – Belgium"
      Case "2068"
         lstRetour("OSLANGUAGENAME") = "Norwegian – Nynorsk"
      Case "2070"
         lstRetour("OSLANGUAGENAME") = "Portuguese – Portugal"
      Case "2072"
         lstRetour("OSLANGUAGENAME") = "Romanian – Moldova"
      Case "2073"
         lstRetour("OSLANGUAGENAME") = "Russian – Moldova"
      Case "2074"
         lstRetour("OSLANGUAGENAME") = "Serbian – Latin"
      Case "2077"
         lstRetour("OSLANGUAGENAME") = "Swedish – Finland"
      Case "3073"
         lstRetour("OSLANGUAGENAME") = "Arabic – Egypt"
      Case "3076"
         lstRetour("OSLANGUAGENAME") = "Chinese (Traditional) – Hong Kong SAR"
      Case "3079"
         lstRetour("OSLANGUAGENAME") = "German – Austria"
      Case "3081"
         lstRetour("OSLANGUAGENAME") = "English – Australia"
      Case "3082"
         lstRetour("OSLANGUAGENAME") = "Spanish – International Sort"
      Case "3084"
         lstRetour("OSLANGUAGENAME") = "French – Canada"
      Case "3098"
         lstRetour("OSLANGUAGENAME") = "Serbian – Cyrillic"
      Case "4097"
         lstRetour("OSLANGUAGENAME") = "Arabic – Libya"
      Case "4100"
         lstRetour("OSLANGUAGENAME") = "Chinese (Simplified) – Singapore"
      Case "4103"
         lstRetour("OSLANGUAGENAME") = "German – Luxembourg"
      Case "4105"
         lstRetour("OSLANGUAGENAME") = "English – Canada"
      Case "4106"
         lstRetour("OSLANGUAGENAME") = "Spanish – Guatemala"
      Case "4108"
         lstRetour("OSLANGUAGENAME") = "French – Switzerland"
      Case "5121"
         lstRetour("OSLANGUAGENAME") = "Arabic – Algeria"
      Case "5127"
         lstRetour("OSLANGUAGENAME") = "German – Liechtenstein"
      Case "5129"
         lstRetour("OSLANGUAGENAME") = "English – New Zealand"
      Case "5130"
         lstRetour("OSLANGUAGENAME") = "Spanish – Costa Rica"
      Case "5132"
         lstRetour("OSLANGUAGENAME") = "French – Luxembourg"
      Case "6145"
         lstRetour("OSLANGUAGENAME") = "Arabic – Morocco"
      Case "6153"
         lstRetour("OSLANGUAGENAME") = "English – Ireland"
      Case "6154"
         lstRetour("OSLANGUAGENAME") = "Spanish – Panama"
      Case "7169"
         lstRetour("OSLANGUAGENAME") = "Arabic – Tunisia"
      Case "7177"
         lstRetour("OSLANGUAGENAME") = "English – South Africa"
      Case "7178"
         lstRetour("OSLANGUAGENAME") = "Spanish – Dominican Republic"
      Case "8193"
         lstRetour("OSLANGUAGENAME") = "Arabic – Oman"
      Case "8201"
         lstRetour("OSLANGUAGENAME") = "English – Jamaica"
      Case "8202"
         lstRetour("OSLANGUAGENAME") = "Spanish – Venezuela"
      Case "9217"
         lstRetour("OSLANGUAGENAME") = "Arabic – Yemen"
      Case "9226"
         lstRetour("OSLANGUAGENAME") = "Spanish – Colombia"
      Case "10241"
         lstRetour("OSLANGUAGENAME") = "Arabic – Syria"
      Case "10249"
         lstRetour("OSLANGUAGENAME") = "English – Belize"
      Case "10250"
         lstRetour("OSLANGUAGENAME") = "Spanish – Peru"
      Case "11265"
         lstRetour("OSLANGUAGENAME") = "Arabic – Jordan"
      Case "11273"
         lstRetour("OSLANGUAGENAME") = "English – Trinidad"
      Case "11274"
         lstRetour("OSLANGUAGENAME") = "Spanish – Argentina"
      Case "12289"
         lstRetour("OSLANGUAGENAME") = "Arabic – Lebanon"
      Case "12298"
         lstRetour("OSLANGUAGENAME") = "Spanish – Ecuador"
      Case "13313"
         lstRetour("OSLANGUAGENAME") = "Arabic – Kuwait"
      Case "13322"
         lstRetour("OSLANGUAGENAME") = "Spanish – Chile"
      Case "14337"
         lstRetour("OSLANGUAGENAME") = "Arabic – U.A.E."
      Case "14346"
         lstRetour("OSLANGUAGENAME") = "Spanish – Uruguay"
      Case "15361"
         lstRetour("OSLANGUAGENAME") = "Arabic – Bahrain"
      Case "15370"
         lstRetour("OSLANGUAGENAME") = "Spanish – Paraguay"
      Case "16385"
         lstRetour("OSLANGUAGENAME") = "Arabic – Qatar"
      Case "16394"
         lstRetour("OSLANGUAGENAME") = "Spanish – Bolivia"
      Case "17418"
         lstRetour("OSLANGUAGENAME") = "Spanish – El Salvador"
      Case "18442"
         lstRetour("OSLANGUAGENAME") = "Spanish – Honduras"
      Case "19466"
         lstRetour("OSLANGUAGENAME") = "Spanish – Nicaragua"
      Case "20490"
         lstRetour("OSLANGUAGENAME") = "Spanish – Puerto Rico"
      Case Else
         REM lstRetour("OSLANGUAGENAME") = "UNKNOWN"      
      End Select
      
      Select Case Trim(lstRetour("OSPRODUCTSUITE"))
      Case "1"
         lstRetour("OSPRODUCTSUITENAME") = "Microsoft Small Business Server was once installed, but may have been upgraded To another version of Windows. Windows Server 2003, Windows XP, And Windows 2000:  Small Business"
      Case "2"
         lstRetour("OSPRODUCTSUITENAME") = "Windows Server 2008 Enterprise, Windows Server 2003, Enterprise Edition, Windows 2000 Advanced Server, Or Windows NT Server 4.0 Enterprise Edition Is installed. Windows Server 2003, Windows XP, And Windows 2000:  Enterprise"
      Case "4"
         lstRetour("OSPRODUCTSUITENAME") = "Windows BackOffice components are installed. Windows Server 2003, Windows XP, And Windows 2000:  BackOffice"
      Case "8"
         lstRetour("OSPRODUCTSUITENAME") = "Communication Server Is installed. Windows Server 2003, Windows XP, And Windows 2000:  Communication Server"
      Case "16"
         lstRetour("OSPRODUCTSUITENAME") = "Terminal Services Is installed. Windows Server 2003, Windows XP, And Windows 2000:  Terminal Services"
      Case "32"
         lstRetour("OSPRODUCTSUITENAME") = "Microsoft Small Business Server Is installed With the restrictive client license. Windows Server 2003, Windows XP, And Windows 2000:  Small Business (Restricted)"
      Case "64"   
         lstRetour("OSPRODUCTSUITENAME") = "Windows XP Embedded Is installed. Windows Server 2003 And Windows XP:  Embedded NT"
      Case "128"   
         lstRetour("OSPRODUCTSUITENAME") = "Windows Server 2008 Datacenter, Windows Server 2003, Datacenter Edition, Or Windows 2000 Datacenter Server Is installed. Windows Server 2003, Windows XP, And Windows 2000:  Data Center"
      Case "256"   
         lstRetour("OSPRODUCTSUITENAME") = "Terminal Services Is installed, but only one interactive session Is supported. Windows Server 2003, Windows XP, And Windows 2000:  This value Is Not available."
      Case "512"   
         lstRetour("OSPRODUCTSUITENAME") = "Windows XP Home Edition Is installed. Windows Server 2003, Windows XP, And Windows 2000:  This value Is Not available."
      Case "1024"
         lstRetour("OSPRODUCTSUITENAME") = "Windows Server 2003, Web Edition Is installed. Windows Server 2003, Windows XP, And Windows 2000:  This value Is Not available."
      Case "8192"
         lstRetour("OSPRODUCTSUITENAME") = "Windows Storage Server 2003 R2 Is installed.Windows Server 2003, Windows XP, And Windows 2000:  This value Is Not available."
      Case "16384"
         lstRetour("OSPRODUCTSUITENAME") = "Windows Server 2003, Compute Cluster Edition Is installed. Windows Server 2003, Windows XP, And Windows 2000:  This value Is Not available."
      Case Else
         REM lstRetour("OSPRODUCTSUITENAME") = "UNKNOWN"
      End Select
      
      Select Case Trim(lstRetour("OSTYPE"))
      Case "0"
         lstRetour("OSTYPENAME") = "Unknown"
      Case "1"
         lstRetour("OSTYPENAME") = "Other"
      Case "2"
         lstRetour("OSTYPENAME") = "MACROS"
      Case "3"
         lstRetour("OSTYPENAME") = "ATTUNIX"
      Case "4"
         lstRetour("OSTYPENAME") = "DGUX"
      Case "5"
         lstRetour("OSTYPENAME") = "DECNT"
      Case "6"
         lstRetour("OSTYPENAME") = "Digital UNIX"
      Case "7"
         lstRetour("OSTYPENAME") = "OpenVMS"
      Case "8"
         lstRetour("OSTYPENAME") = "HPUX"
      Case "9"
         lstRetour("OSTYPENAME") = "AIX"
      Case "10"
         lstRetour("OSTYPENAME") = "MVS"
      Case "11"
         lstRetour("OSTYPENAME") = "OS400"
      Case "12"
         lstRetour("OSTYPENAME") = "OS/2"
      Case "13"
         lstRetour("OSTYPENAME") = "JavaVM"
      Case "14"
         lstRetour("OSTYPENAME") = "MSDOS"
      Case "15"
         lstRetour("OSTYPENAME") = "WIN3x"
      Case "16"
         lstRetour("OSTYPENAME") = "WIN95"
      Case "17"
         lstRetour("OSTYPENAME") = "WIN98"
      Case "18"
         lstRetour("OSTYPENAME") = "WINNT"
      Case "19"
         lstRetour("OSTYPENAME") = "WINCE"
      Case "20"
         lstRetour("OSTYPENAME") = "NCR3000"
      Case "21"
         lstRetour("OSTYPENAME") = "NetWare"
      Case "22"
         lstRetour("OSTYPENAME") = "OSF"
      Case "23"
         lstRetour("OSTYPENAME") = "DC/OS"
      Case "24"
         lstRetour("OSTYPENAME") = "Reliant UNIX"
      Case "25"
         lstRetour("OSTYPENAME") = "SCO UnixWare"
      Case "26"
         lstRetour("OSTYPENAME") = "SCO OpenServer"
      Case "27"
         lstRetour("OSTYPENAME") = "Sequent"
      Case "28"
         lstRetour("OSTYPENAME") = "IRIX"
      Case "29"
         lstRetour("OSTYPENAME") = "Solaris"
      Case "30"
         lstRetour("OSTYPENAME") = "SunOS"
      Case "31"   
         lstRetour("OSTYPENAME") = "U6000"
      Case "32"
         lstRetour("OSTYPENAME") = "ASERIES"
      Case "33"
         lstRetour("OSTYPENAME") = "TandemNSK"
      Case "34"
         lstRetour("OSTYPENAME") = "TandemNT"
      Case "35"
         lstRetour("OSTYPENAME") = "BS2000"
      Case "36"   
         lstRetour("OSTYPENAME") = "LINUX"
      Case "37"
         lstRetour("OSTYPENAME") = "Lynx"
      Case "38"
         lstRetour("OSTYPENAME") = "XENIX"
      Case "39"
         lstRetour("OSTYPENAME") = "VM/ESA"
      Case "40"
         lstRetour("OSTYPENAME") = "Interactive UNIX"
      Case "41"
         lstRetour("OSTYPENAME") = "BSDUNIX"
      Case "42"
         lstRetour("OSTYPENAME") = "FreeBSD"
      Case "43"
         lstRetour("OSTYPENAME") = "NetBSD"
      Case "44"
         lstRetour("OSTYPENAME") = "GNU Hurd"
      Case "45"
         lstRetour("OSTYPENAME") = "OS9"
      Case "46"
         lstRetour("OSTYPENAME") = "MACH Kernel"
      Case "47"
         lstRetour("OSTYPENAME") = "Inferno"
      Case "48"
         lstRetour("OSTYPENAME") = "QNX"
      Case "49"
         lstRetour("OSTYPENAME") = "EPOC"
      Case "50"
         lstRetour("OSTYPENAME") = "IxWorks"
      Case "51"
         lstRetour("OSTYPENAME") = "VxWorks"
      Case "52"
         lstRetour("OSTYPENAME") = "MiNT"
      Case "53"
         lstRetour("OSTYPENAME") = "BeOS"
      Case "54"
         lstRetour("OSTYPENAME") = "HP MPE"
      Case "55"
         lstRetour("OSTYPENAME") = "NextStep"
      Case "56"
         lstRetour("OSTYPENAME") = "PalmPilot"
      Case "57"
         lstRetour("OSTYPENAME") = "Rhapsody"
      Case Else
         REM lstRetour("OSTYPENAME") = "UNKNOWN"
      End Select
      
      Select Case Trim(lstRetour("OPERATINGSYSTEMSKU"))
      Case "0"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Undefined"
      Case "1"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Ultimate Edition"
      Case "2"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Home Basic Edition"
      Case "3"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Home Premium Edition"
      Case "4"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Enterprise Edition"
      Case "5"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Home Basic N Edition"
      Case "6"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Business Edition"
      Case "7"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Standard Server Edition"
      Case "8"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Datacenter Server Edition"
      Case "9"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Small Business Server Edition"
      Case "10"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Enterprise Server Edition"
      Case "11"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Starter Edition"
      Case "12"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Datacenter Server Core Edition"
      Case "13"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Standard Server Core Edition"
      Case "14"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Enterprise Server Core Edition"
      Case "15"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Enterprise Server Edition For Itanium-Based Systems"
      Case "16"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Business N Edition"
      Case "17"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Web Server Edition"
      Case "18"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Cluster Server Edition"
      Case "19"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Home Server Edition"
      Case "20"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Storage Express Server Edition"
      Case "21"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Storage Standard Server Edition"
      Case "22"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Storage Workgroup Server Edition"
      Case "23"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Storage Enterprise Server Edition"
      Case "24"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Server For Small Business Edition"
      Case "25"
         lstRetour("OPERATINGSYSTEMSKUNAME") = "Small Business Server Premium Edition"
      Case Else
         REM lstRetour("OPERATINGSYSTEMSKUNAME") = "UNKNOWN"
      End Select
      
      Select Case Trim(lstRetour("PRODUCTTYPE"))
      Case "1"
         lstRetour("PRODUCTTYPENAME") = "Work Station"
      Case "2"
         lstRetour("PRODUCTTYPENAME") = "Domain Controller"
      Case "3"
         lstRetour("PRODUCTTYPENAME") = "Server"
      Case Else
         REM lstRetour("PRODUCTTYPENAME") = "UNKNOWN"
      End Select
      
      Select Case Trim(lstRetour("SUITEMASK"))
      Case "1"
         lstRetour("SUITEMASKNAME") = "Small Business"
      Case "2"
         lstRetour("SUITEMASKNAME") = "Enterprise"
      Case "4"
         lstRetour("SUITEMASKNAME") = "BackOffice"
      Case "8"
         lstRetour("SUITEMASKNAME") = "Communications"
      Case "16"
         lstRetour("SUITEMASKNAME") = "Terminal"
      Case "32"
         lstRetour("SUITEMASKNAME") = "Small Business Restricted"
      Case "64"
         lstRetour("SUITEMASKNAME") = "Embedded NT"
      Case "128"
         lstRetour("SUITEMASKNAME") = "Data Center"
      Case "256"
         lstRetour("SUITEMASKNAME") = "Single User"
      Case "512"
         lstRetour("SUITEMASKNAME") = "Personal"
      Case "1024"
         lstRetour("SUITEMASKNAME") = "Blade"      
      Case Else
         REM lstRetour("SUITEMASKNAME") = "UNKNOWN"
      End Select
   End if
   
   WindowsOSInfo = lstRetour
   Erase lstRetour

   Exit Function
ErreurHandle:
   MsgBox "("+Structure_Log+" : "+Cstr(GetThreadInfo (1))+" Call by "+Cstr(GetThreadInfo(10))+")"+Chr(10)+"Error " + CStr(Err) + " : "+Chr(10) + CStr(Error)+". "+Chr(10)+"Line # "+Cstr(Erl),16," ERROR !"
   Erase lstRetour
   lstRetour("BOOTDEVICE") = ""
   lstRetour("BUILDNUMBER") = ""
   lstRetour("BUILDTYPE") = ""
   lstRetour("CAPTION") = ""
   lstRetour("CODESET") = ""
   lstRetour("COUNTRYCODE") = ""
   lstRetour("CREATIONCLASSNAME") = ""
   lstRetour("CSCREATIONCLASSNAME") = ""
   lstRetour("CSDVERSION") = ""
   lstRetour("CSNAME") = ""
   lstRetour("CURRENTTIMEZONE") = ""
   lstRetour("DATAEXECUTIONPREVENTION_AVAILABLE") = ""
   rem   lstRetour("DATAEXECUTIONPREVENTION_32BITAPPLICATION") = ""
   lstRetour("DATAEXECUTIONPREVENTION_DRIVERS") = ""
   lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICY") = ""
   lstRetour("DATAEXECUTIONPREVENTION_SUPPORTPOLICYNAME") = ""
   lstRetour("DEBUG") = ""
   lstRetour("DESCRIPTION") = ""
   lstRetour("DISTRIBUTED") = ""
   lstRetour("ENCRYPTIONLEVEL") = ""
   lstRetour("FOREGROUNDAPPLICATIONBOOST") = ""
   lstRetour("FOREGROUNDAPPLICATIONBOOSTNAME") = ""
   lstRetour("FREEPHYSICALMEMORY") = ""
   lstRetour("FREESPACEINPAGINGFILES") = ""
   lstRetour("FREEVIRTUALMEMORY") = ""
   lstRetour("INSTALLDATE") = ""
   lstRetour("LARGESYSTEMCACHE") = ""
   lstRetour("LARGESYSTEMCACHENAME") = ""
   lstRetour("LASTBOOTUPTIME") = ""
   lstRetour("LOCALDATETIME") = ""
   lstRetour("LOCALE") = ""
   lstRetour("MANUFACTURER") = ""
   lstRetour("MAXNUMBEROFPROCESSES") = ""
   lstRetour("MAXPROCESSMEMORYSIZE") = ""
   lstRetour("MUILANGUAGES") = ""
   lstRetour("NAME") = ""
   lstRetour("NUMBEROFLICENSEDUSERS") = ""
   lstRetour("NUMBEROFPROCESSES") = ""
   lstRetour("NUMBERSOFUSERS") = ""
   lstRetour("OPERATINGSYSTEMSKU") = ""
   lstRetour("OPERATINGSYSTEMSKUNAME") = ""
   lstRetour("ORGANIZATION") = ""
   lstRetour("OSARCHITECTURE") = ""
   lstRetour("OSLANGUAGE") = ""
   lstRetour("OSLANGUAGENAME") = ""
   lstRetour("OSPRODUCTSUITE") = ""
   lstRetour("OSPRODUCTSUITENAME") = ""
   lstRetour("OSTYPE") = ""
   lstRetour("OSTYPENAME") = ""
   lstRetour("OTHERTYPEDESCRIPTION") = ""
   lstRetour("PAEENABLED") = ""
   lstRetour("PLUSPRODUCTID") = ""
   lstRetour("PLUSVERSIONNUMBER") = ""
   lstRetour("PRIMARY") = ""
   lstRetour("PRODUCTTYPE") = ""
   lstRetour("PRODUCTTYPENAME") = ""
   lstRetour("REGISTEREDUSER") = ""
   lstRetour("SERIALNUMBER") = ""
   lstRetour("SERVICEPACKMAJORVERSION") = ""
   lstRetour("SERVICEPACKMINORVERSION") = ""
   lstRetour("SIZESTOREDINPAGINGFILES") = ""
   lstRetour("STATUS") = ""
   lstRetour("SUITEMASK") = ""
   lstRetour("SUITEMASKNAME") = ""
   lstRetour("SYSTEMDEVICE") = ""
   lstRetour("SYSTEMDIRECTORY") = ""
   lstRetour("SYSTEMDRIVE") = ""
   lstRetour("TOTALSWAPSPACESIZE") = ""
   lstRetour("TOTALVIRTUALMEMORYSIZE") = ""
   lstRetour("TOTALVISIBLEMEMORYSIZE") = ""
   lstRetour("VERSION") = ""
   lstRetour("WINDOWSDIRECTORY") = ""
   WindowsOSInfo = lstRetour
   Erase lstRetour
   Exit Function
End Function