Mauvais numéro retourné par OSVersion() sous Windows 10

Sujets variés concernant le développement en PureBasic
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Mauvais numéro retourné par OSVersion() sous Windows 10

Message par Marc56 »

Windows 8.1
C:\>ver
Microsoft Windows [version 6.3.9600]

Debug OSVersion() => 90 Ok

Windows 10
C:\>ver
Microsoft Windows [version 10.0.10162]

Debug OSVersion() => 90 aussi!

Alors que dans le visualiseur de structures on a
#PB_OS_Windows_8 (= 90)
#PB_OS_Windows_Future (= 200) ; Nouvelle version de Windows (n'existant pas lorsque le programme a été écrit)

Au début j'ai pensé que PB se rendait compte que Windows 10 tournait dans virtualbox sous windows 8.1. Mais non, si je lance un XP dans cette même VM, osversion retourne alors 60 qui est bien la constante pour #PB_OS_Windows_XP

Bon, c'est pas trop gênant. J'espère juste que c'est prévu dans la 5.40.
(Oui, d'accord W10 est encore en bêta, mais il sort officiellement le 29 juillet)

Je ne sais pas sur quelle API se base la fonction OSVersion() de PB ?
Perso, j'ai toujours utilisé 'ver' et 'winver' pour identifier la version.
:wink:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par Ar-S »

Nul doute qu'ils corrigeront ceci dans la 5.40 (ou 5.32 ?)
Sous MINT 17.2 l'OS version est de 2000 :) ce qui correspond bien à #PB_OS_Linux_Future
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par blendman »

Ar-S a écrit :Nul doute qu'ils corrigeront ceci dans la 5.40 (ou 5.32 ?)
et elle sort quand cette 5.40 ? :)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par Ar-S »

héhé faut demander au grand Manitou
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par falsam »

Bonjour Marc.

Pourrais tu tester ce code et le mettre à jour avec la valeur retourner dans la variable sVersion.

Code : Tout sélectionner

Procedure.s NativeGetVersion()
    Protected Dim tOSVw.l($54)
   
    lib = LoadLibrary_("ntdll.dll")
    proc = GetProcAddress_(lib, "RtlGetVersion")
    tOSVw(0) = $54 * $4
    CallFunctionFast(proc, @tOSVw())
    FreeLibrary_(lib)
 
    ProcedureReturn Str(tOSVw(4)) + "." + Str(tOSVw(1)) + "." + Str(tOSVw(2))
EndProcedure
 
Procedure.s VersionToName(sVersion.s)
  
  Select sVersion
      
    Case "1.0.0": ProcedureReturn "Windows 95"
    Case "1.1.0": ProcedureReturn "Windows 98"
    Case "1.9.0": ProcedureReturn "Windows Millenium"
    Case "2.3.0": ProcedureReturn "Windows NT 3.51"
    Case "2.4.0": ProcedureReturn "Windows NT 4.0"
    Case "2.5.0": ProcedureReturn "Windows 2000"
    Case "2.5.1": ProcedureReturn "Windows XP"
    Case "2.5.3": ProcedureReturn "Windows 2003 (SERVER)"
    Case "2.6.0": ProcedureReturn "Windows Vista"
    Case "2.6.1": ProcedureReturn "Windows 7"
    Case "2.6.2": ProcedureReturn "Windows 8"
    Case "2.6.3": ProcedureReturn "Windows 8.1"
      
    Default: ProcedureReturn sVersion
      
  EndSelect
EndProcedure  
  
Debug VersionToName(NativeGetVersion())
Merci :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par Marc56 »

falsam a écrit :et elle sort quand cette 5.40 ?
Fred a donné une indication la semaine dernière :)
...'Back on PureBasic: yes we are hard at work to ship the new release (which will be an LTS one - yes it's 2 years already). We except it to be out for a beta in august and final in september. It already has a quite big list of new stuffs !'
http://www.purebasic.fr/english/viewtop ... 67#p467467
falsam a écrit :Pourrais tu tester ce code et le mettre à jour avec la valeur retourner dans la variable sVersion.
Done. Marche pô :(
Attente du démarrage du programme...
Type d'exécutable: Windows - x64 (64bit, Unicode)
Exécutable démarré.
[ERREUR] Ligne: 7
[ERREUR] Accès mémoire invalide. (erreur d'écriture à l'adresse 0)


Ligne 7: proc = GetProcAddress_(lib, "RtlGetVersion")

Je pensais avoir installé la version démo (l'erreur venant d'une instruction d'appel direct API) mais ce n'est pas cela. J'ai bien installé ma version sous licence.

Edit: Même message avec la version x86 de PB 5.31 complet (avec en plus un tas de messages méchants de Windows 10 quand j'ai voulu installer une version x86 sur ce bel os neuf x64)

:?
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par Mesa »

Dans le même fil, Fred a dit aussi
For example, we are now toying with a LLVM backend for PB which is much easier to do, thanks to the JS pipeline which is more highlevel than raw ASM one. It won't be in the 5.40 version, but it should be ready one day or another :)
Ça veut dire qu'il(s) étudie(nt) le "compilateur" LLVM et ici http://llvm.org/Features.html on peut lire:
An easily retargettable code generator, which currently supports X86, X86-64, PowerPC, PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU, MIPS, MSP430, SystemZ, and XCore.
A Just-In-Time (JIT) code generation system, which currently supports X86, X86-64, ARM, AArch64, Mips, SystemZ, PowerPC, and PowerPC-64.
Il est donc possible d'espérer une version ARM et donc android (au mieux) après la version 5.40 de PB ...


M.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par GallyHC »

Pour Windows, un code simple que l'on peu forcement exploiter en attendant la nouvelle version de PB :

Code : Tout sélectionner

;
; VERSION DE WINDOWS.
;

Define osv.OSVERSIONINFO
osv\dwOSVersionInfoSize=SizeOf(OSVERSIONINFO)

If GetVersionEx_(osv) = #True
  Debug Str(osv\dwMajorVersion) + "." + Str(osv\dwMinorVersion) + "." + Str(osv\dwBuildNumber)
EndIf
et voila ce que pourrait donné le code en attendant :

Code : Tout sélectionner

Select OSVersion()
  Case  #PB_OS_Windows_NT3_51
  Case  #PB_OS_Windows_95
  Case  #PB_OS_Windows_NT_4
  Case  #PB_OS_Windows_98
  Case  #PB_OS_Windows_ME
  Case  #PB_OS_Windows_2000
  Case  #PB_OS_Windows_XP
  Case  #PB_OS_Windows_Server_2003
  Case  #PB_OS_Windows_Vista
  Case  #PB_OS_Windows_Server_2008
  Case  #PB_OS_Windows_7
  Case  #PB_OS_Windows_Server_2008_R2  
  Case  #PB_OS_Windows_Server_2012
  Case  #PB_OS_Windows_8, #PB_OS_Windows_Future
    Define osv.OSVERSIONINFO
    osv\dwOSVersionInfoSize=SizeOf(OSVERSIONINFO)
    If GetVersionEx_(osv) = #True
      If osv\dwMajorVersion = 10
        Debug "C'est un Windows 10"
      EndIf
      Debug Str(osv\dwMajorVersion) + "." + Str(osv\dwMinorVersion) + "." + Str(osv\dwBuildNumber)
    EndIf
  Default
    Debug "La c'est un problème"
EndSelect
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par falsam »

Merci pour cette alternative Gally. J'attend de voir la valeur retourné par Window 10.

Marc, merci d'avoir accepter de faire le cobaye avec mon code. Le résultat n'est pas celui que j'attendais mais je suis presque pas étonné. Je pense que Windows 10 va nous réserver quelques surprises. Je pense que tu testeras le code de gally. A plus tard pour le résultat.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par falsam »

Marc56 a écrit :
falsam a écrit :et elle sort quand cette 5.40 ?
Fred a donné une indication la semaine dernière
Faudrait voir ne pas me confondre avec Blendman. Ce manant, cet hérétique :mrgreen:
blendman a écrit :et elle sort quand cette 5.40 ? :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par Marc56 »

@falsam: Désolé :? :roll:

@GallyHC: 6.2.9200 :wink:
(Windows 10 Pro Insider Preview - Version d'évaluation. Build 10162)(Virtualbox 4.3)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par GallyHC »

Bonjour,

Heuuu la y aura un problème, avec une version donné par la dll de Windows a "6.2.9200" et avec ce que tu donne dans ton premier poste "Microsoft Windows [version 6.3.9600]" pour Windows 8 donc "6.3.9600".

Windows 10 a une version moindre que Windows 8 (problème). D'où le bug avec "PureBasic" qui compare aussi, surement les numéro de version des OS.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par Marc56 »

Ton programme retourne la même valeur pour Windows 8.1 et Windows 10

Windows 8.1
Ver : 6.3.9600
Winver : 6.3.9600
PB : 6.2.9200

Windows 10
Ver 10.0.10162
Winver : 10.0.10162
PB: 6.2.9200
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par GallyHC »

Bonjour,

Mon source utilise "GetVersionEx_()", fonction de Microsoft pour avoir la version de Windows. Le problème est donc la (tu as une version beta).

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Mauvais numéro retourné par OSVersion() sous Windows 10

Message par GallyHC »

Bonjour,

Un code pour avoir quelque informations supplémentaire.

Code : Tout sélectionner

#PRODUCT_ULTIMATE                     = 1
#PRODUCT_HOME_PREMIUM                 = 3
#PRODUCT_HOME_BASIC                   = 2
#PRODUCT_ENTERPRISE                   = 4
#PRODUCT_BUSINESS                     = 6
#PRODUCT_STANDARD_SERVER              = 7
#PRODUCT_DATACENTER_SERVER            = 8
#PRODUCT_SMALLBUSINESS_SERVER         = 9
#PRODUCT_DATACENTER_SERVER_CORE       = $0C
#PRODUCT_ENTERPRISE_SERVER            = $0A
#PRODUCT_STARTER                      = $0B
#PRODUCT_STANDARD_SERVER_CORE         = $0D
#PRODUCT_ENTERPRISE_SERVER_CORE       = $0E
#PRODUCT_ENTERPRISE_SERVER_IA64       = $0F
#PRODUCT_WEB_SERVER                   = $11
#PRODUCT_CLUSTER_SERVER               = $12
#PRODUCT_SMALLBUSINESS_SERVER_PREMIUM = $19
#PRODUCT_WEB_SERVER_CORE              = $1D
#PRODUCT_PROFESSIONAL                 = $30

#KEY_WOW64_64KEY                      = $100
#KEY_WOW64_32KEY                      = $200
;
;
;
Procedure Is64Bit()
;
  Protected.i retval, openlib
  Protected *IsWow64
  
  openlib = OpenLibrary(0, "Kernel32.dll")
  If openlib
     *IsWow64 = GetFunction(0,"IsWow64Process")
     If *IsWow64
       CallFunctionFast(*IsWow64, GetCurrentProcess_(), @retval)
       CloseLibrary(0)
       ProcedureReturn retval
     EndIf
   EndIf
   ProcedureReturn -1

EndProcedure
;
;
;
Procedure.s GetWindowsProductKey()
; ROUTINE DU PRODUCTKEY DE WINDOWS.
  Protected i.i
  Protected j.i
  Protected x.i
  Protected hKey.i
  Protected lRes.i
  Protected size.i    = 280
  Protected result.s
  Protected *memkey = AllocateMemory(size)
  Protected *newmem = AllocateMemory(size)
  Protected *digits = AllocateMemory(25)
 
  PokeS(*digits, "BCDFGHJKMPQRTVWXY2346789", -1, #PB_Ascii)
  If OSVersion() <= #PB_OS_Windows_2000
    lRes = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows NT\CurrentVersion", 0, #KEY_READ, @hKey)
  Else
    lRes = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows NT\CurrentVersion", 0, #KEY_READ | #KEY_WOW64_64KEY, @hKey)
  EndIf
  If lRes = #ERROR_SUCCESS
    RegQueryValueEx_(hKey, "DigitalProductID", 0, 0, *memkey, @size)
    RegCloseKey_(hKey)
    If size <> 280
      For i = 24 To 0 Step -1
        x = 0
        For j = 66 To 52 Step -1
          x = (x << 8) + PeekA(*memkey + j)
          PokeA(*memkey + j, x / 24)
          x % 24
        Next j
        PokeA(*newmem + i, PeekA(*digits + x))
      Next i
      For i = 0 To 15 Step 5
        result + PeekS(*newmem + i, 5, #PB_Ascii) + " "
      Next i
      result + PeekS(*newmem + 20, 5, #PB_Ascii)
    EndIf
  EndIf
  FreeMemory(*memkey)
  FreeMemory(*newmem)
  FreeMemory(*digits)
  ProcedureReturn Result

EndProcedure
;
;
;
Define sType.s
Define osv.OSVERSIONINFOEX
osv\dwOSVersionInfoSize=SizeOf(OSVERSIONINFOEX)
If GetVersionEx_(osv) = #True
  Debug "OS Version : " + Str(osv\dwMajorVersion) + "." + Str(osv\dwMinorVersion) + "." + Str(osv\dwBuildNumber)
  Debug "Windows key : " + GetWindowsProductKey()
  Debug "Service Pack : " + Str(osv\wServicePackMajor) + "." + Str(osv\wServicePackMajor)
  Debug "Service Info : " + PeekS(@osv\szCSDVersion, -1, #PB_Unicode)
  Select osv\wProductType
    Case #PRODUCT_ULTIMATE
       sType = "Ultimate Edition"
    Case #PRODUCT_PROFESSIONAL
       sType = "Professional"
    Case #PRODUCT_HOME_PREMIUM
       sType = "Home Premium Edition"
     Case #PRODUCT_HOME_BASIC
       sType = "Home Basic Edition"
    Case #PRODUCT_ENTERPRISE
       sType = "Enterprise Edition"
    Case #PRODUCT_BUSINESS
       sType = "Business Edition"
    Case #PRODUCT_STARTER:
       sType = "Starter Edition"
    Case #PRODUCT_CLUSTER_SERVER
       sType = "Cluster Server Edition"
    Case #PRODUCT_DATACENTER_SERVER
       sType = "Datacenter Edition"
    Case #PRODUCT_DATACENTER_SERVER_CORE
       sType = "Datacenter Edition (core installation)"
    Case #PRODUCT_ENTERPRISE_SERVER
       sType = "Enterprise Edition"
    Case #PRODUCT_ENTERPRISE_SERVER_CORE
       sType = "Enterprise Edition (core installation)"
    Case #PRODUCT_ENTERPRISE_SERVER_IA64
       sType = "Enterprise Edition for Itanium-based Systems"
    Case #PRODUCT_SMALLBUSINESS_SERVER
       sType = "Small Business Server"
    Case #PRODUCT_SMALLBUSINESS_SERVER_PREMIUM
       sType = "Small Business Server Premium Edition"
    Case #PRODUCT_STANDARD_SERVER
       sType = "Standard Edition"
    Case #PRODUCT_STANDARD_SERVER_CORE
       sType = "Standard Edition (core installation)"
    Case #PRODUCT_WEB_SERVER
       sType = "Web Server Edition"
    Case #PRODUCT_WEB_SERVER_CORE
       sType = "Web Server Edition (core installation)"
    Default
       sType = ""
  EndSelect
  Debug "Windows Type : " + sType
  Select Is64Bit()
    Case 0
      Debug "x32"
    Case 1
      Debug "x64"
  EndSelect
EndIf
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre