Jump to content

Check if 32 or 64 bit


Go to solution Solved by trashy,

Recommended Posts

How to check if an exe is 32 or 64 bit. I want to check OS version and Arch on an offline drive. I've got this but I'd like something better. I don't think FileGetVersion can do this and what about something like an AutoIt compiled exe or a dll.

                $version = StringLeft(FileGetVersion(GUICtrlRead($Combo1) & "\Windows\system32\WinVer.exe"), 3)
                If StringLeft($version, 3) = "6.1" Then
                    $version = "WIN7"
                ElseIf StringLeft($version, 3) = "6.0" Then
                    $version = "VISTA"
                ElseIf StringLeft($version, 3) = "5.1" Then
                    $version = "XP"
                EndIf
                $arch = (GUICtrlRead($Combo1) & "\Program Files (x86)")
                If Not FileExists($arch) Then
                    $arch = "_x86"
                ElseIf FileExists($arch) Then
                    $arch = "_x64"
                EndIf
Edited by trashy
Link to comment
Share on other sites

Converted from a working C# function : 

#include <FileConstants.au3>

Local $Native = 0, $I386 = 0x014c, $Itanium = 0x0200, $x64 = 0x8664

Switch GetMachineType(@AutoItExe)
    Case $Native
        ConsoleWrite("Native" & @Lf)
    Case $I386
        ConsoleWrite("I386" & @Lf)
    Case $Itanium
        ConsoleWrite("Itanium" & @Lf)
    Case $x64
        ConsoleWrite("x64" & @Lf)
EndSwitch

Func GetMachineType($sFileName)
    Local Const $PE_POINTER_OFFSET = 60
    Local Const $MACHINE_OFFSET = 4

    Local $hFile = FileOpen($sFileName, $FO_BINARY)
    Local $bData = FileRead($hFile, 4096)
    FileClose($hFile)

    ;dos header is 64 bytes, last element, long (4 bytes) is the address of the PE header
    Local $PE_HEADER_ADDR = Number(BinaryMid($bData, 1 + $PE_POINTER_OFFSET, 4))
    Local $iMachineUint = Number(BinaryMid($bData, 1 + $PE_HEADER_ADDR + $MACHINE_OFFSET, 2))

    Return $iMachineUint
EndFunc

_

Br, FireFox.

Edited by FireFox
Link to comment
Share on other sites

Indeed.  :whistle:

 

What about _WinAPI_GetBinaryType() function?

Br,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

I imagine that is same as kafu's 

But included as part of the AutoIt UDFs.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

2x  :whistle:

@trashy: why is that function not working for you? iexplorer.exe reports the architecture properly.

Br,

UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

 @UEZ: Did you read the question?

Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the Universe
trying to produce bigger and better idiots.
So far, the Universe is winning.

Link to comment
Share on other sites

@funkey: you mean

 

Let's just use iexplore.exe for example. There's not an easy to determine if it' a 32 or 64 bit app?

 

If run the example for _WinAPI_GetBinaryType I get 32-bit for iexplore.exe located in c:Program Files (x86)Internet Explorer and 64-bit for the exe located in c:Program FilesInternet Explorer.

 

Br,

UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

 

How to check if an exe is 32 or 64 bit. I want to check OS version and Arch on an offline drive. I've got this but I'd like something better. I don't think FileGetVersion can do this and what about something like an AutoIt compiled exe or a dll.

Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the Universe
trying to produce bigger and better idiots.
So far, the Universe is winning.

Link to comment
Share on other sites

If a drive containing an os has the folder Program Files (x86) can it not be concluded it's a 64 bit os?

Yes.

But better check the registry if there is a Wow64 key in case a dumb user has created the Program Files (x86) folder.

Edited by FireFox
Link to comment
Share on other sites

Regarding to check which os is installed on the ext. disk you can try these steps:

  • load the ext. registry hive using REG LOAD <KeyName> <FileName> (cmdline tool)
  • extract the needed values from the loaded hive using RegRead (<Keyname>HKLMSOFTWAREMicrosoftWindows NTCurrentVersion)
  • unload the hive REG UNLOAD <KeyName>

 

Br,

UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...