[Hardware] Connaitre le type d'architecture d'un OS
Bonjour a tous,
Je ne suis pas sur que ce soit la bonne section, mais tant pis...
J'aimerais pouvoir connaitre le type d'architecture d'un OS Windows, a savoir s'il est en version 64 bits ou non. Si j'ai ce besoin, c'est a cause de la portabilite d'une appli 32bits sur un OS 64 bits et de l'appel a un programme externe. En gros, sur un systeme 64 bits, WOW64 redirige mon chemin d'appel du programme vers %windir%\sysWOW64 alors que je dois appeler un programme dans %windir%\system32 . Le programme devant fonctionner sur tous les windows server depuis le 2000, je ne peux pas utiliser l'appel a "Wow64DisableWow64FsRedirection" (qui de toute maniere n'existe pas sur ma machine, un WinXP).
Donc je comptais pouvoir detecter le type d'OS, 32 ou 64 bits, mais je n'y arrive pas:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
OSVERSIONINFOEX osvi1;
SYSTEM_INFO si1;
ZeroMemory(&osvi1, sizeof(OSVERSIONINFOEX));
osvi1.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
GetVersionEx((LPOSVERSIONINFOW)&osvi1);
GetSystemInfo(&si1);
if (si1.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
printf("si1.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64");
else if (si1.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
printf("si1.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64");
else
printf("Proc val is %d // %d", si1.wProcessorArchitecture, si1.dwProcessorType); |
Je me retrouve toujours dans la condition "else", avec comme valeur pour si1.dwProcessorType une valeur a 586, soit un INTEL_PENTIUM... Et le wProcessorArchitecture reste definitivement a 0 :(
Quelqu'un saurait-il comment savoir si l'OS est un 64 bits ou un 32, que ce soit compilable sur WinXP, compatible sur win2000 server et plus (win2003 server, win2008 server) ?
Merci a tous :)