FreeBasic
Главная
Вход
Регистрация
Среда, 16.10.2024, 07:31Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Как x86 программе узнать, что она запущена в x64 windows?
electrikДата: Среда, 07.10.2015, 12:58 | Сообщение # 1
Полковник
Группа: Друзья
Сообщений: 182
Репутация: 3
Статус: Offline
данный пример показывает, Как во время исполнения, 32-битной программе узнать, что она запущена в 64-битной Windows

Код
' пример на c++ находится на http://www.viva64.com/ru/k/0016/
#include "windows.bi"  

declare function IsWow64() as bool  

   if (IsWow64()) then
     print("The process is running under WOW64.")
   else
     print("The process is not running under WOW64.")
end if
   print("Press any key to continue...")
sleep

function IsWow64() as bool
   type LPFN_ISWOW64PROCESS as function(byval as HANDLE, byval as PBOOL) as BOOL
   dim as HMODULE module = GetModuleHandle("kernel32.dll")
   dim as BOOL bIsWow64 = FALSE
   dim fnIsWow64Process as LPFN_ISWOW64PROCESS = cast(LPFN_ISWOW64PROCESS ,GetProcAddress(module, "IsWow64Process"))
   if(fnIsWow64Process) then
     if (fnIsWow64Process(GetCurrentProcess(), @bIsWow64)) = 0 then
'      throw std::exception("Unknown error");
return FALSE
   end if
   end if
   return bIsWow64
end function
 
SomerickДата: Суббота, 09.02.2019, 06:17 | Сообщение # 2
Рядовой
Группа: Пользователи
Сообщений: 14
Репутация: 2
Статус: Offline
Можно напрямую вызывать IsWow64Process без получения адреса, она ведь уже давно присутствует в kernel32.dll.

А узнать архитектуру процессора так

Код
Dim As SYSTEM_INFO si
GetNativeSystemInfo @si

Select Case si.wProcessorArchitecture
    Case PROCESSOR_ARCHITECTURE_INTEL
        '32
    Case PROCESSOR_ARCHITECTURE_AMD64
        '64
    Case PROCESSOR_ARCHITECTURE_ARM
        'arm
    Case PROCESSOR_ARCHITECTURE_ARM64
        'arm64
    Case PROCESSOR_ARCHITECTURE_IA64
        'itanium
    Case PROCESSOR_ARCHITECTURE_UNKNOWN
        '?
End Select
 
  • Страница 1 из 1
  • 1
Поиск: