Jump to content

Recommended Posts

Posted (edited)

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
Posted (edited)

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
Posted

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

Posted

WinAPI_GetBinaryType()

Could be just what I' looking for. Out of time right now , I'll check it out later and post my results.

Thanks

Posted

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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Posted

 @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.

Posted

@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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Posted

 

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.

Posted (edited)

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
Posted

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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

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
  • Recently Browsing   0 members

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