Get the binary type for exe / dll file.
;Coded by UEZ build 2024-04-08
#AutoIt3Wrapper_UseX64 = y
#include <WinAPIFiles.au3>
#include <WinAPIProc.au3>
Global $sFile = FileOpenDialog("Select a DLL file", "", "File (*.dll;*.exe)", $FD_FILEMUSTEXIST)
If @error Then Exit
MsgBox($MB_ICONINFORMATION, "File Binary Type", StringRegExpReplace($sFile, ".+\\(.+)", "$1") & " = " & _WinAPI_GetBinaryType2($sFile))
; #FUNCTION# ====================================================================================================================
; Author.........: UEZ
; Modified.......:
; ===============================================================================================================================
Func _WinAPI_GetBinaryType2($sFile)
Local Const $hFile = _WinAPI_CreateFile($sFile, 2, 2)
If Not $hFile Or @error Then Return SetError(1, 0, 0)
Local Const $hMapping = _WinAPI_CreateFileMapping($hFile, 0, Null, $PAGE_READONLY, Null)
If Not $hMapping Then
_WinAPI_CloseHandle($hFile)
Return SetError(2, 0, 0)
EndIf
Local Const $pAddress = _WinAPI_MapViewOfFile($hMapping, 0, 0, $FILE_MAP_READ)
If Not $pAddress Or @error Then __ReturnGBT2($hMapping, $hFile, 3)
Local $aHeader = DllCall("Dbghelp.dll", "ptr", "ImageNtHeader", "ptr", $pAddress)
If @error Or IsArray($aHeader) = 0 Then Return __ReturnGBT2($hMapping, $hFile, 4)
Local $tIMAGE_NT_HEADERS = DllStructCreate("dword Signature;ptr FileHeader;ptr OptionalHeader;", $aHeader[0])
If @error Or Not IsDllStruct($tIMAGE_NT_HEADERS) Then Return __ReturnGBT2($hMapping, $hFile, 5)
Local $tIMAGE_FILE_HEADER = DllStructCreate("word Machine;word NumberOfSections;dword TimeDateStamp;dword PointerToSymbolTable;dword NumberOfSymbols;word SizeOfOptionalHeader;word Characteristics;", DllStructGetPtr($tIMAGE_NT_HEADERS) + 4)
If @error Or Not IsDllStruct($tIMAGE_FILE_HEADER) Then Return __ReturnGBT2($hMapping, $hFile, 6)
__ReturnGBT2($hMapping, $hFile, 0)
Switch $tIMAGE_FILE_HEADER.Machine
Case 0x014c
Return "x86"
Case 0x0200
Return "Intel Itanium"
Case 0x8664
Return "x64"
Case Else
Return "Error"
EndSwitch
EndFunc ;==>_WinAPI_GetBinaryType2
Func __ReturnGBT2($hMapping, $hFile, $iError)
_WinAPI_CloseHandle($hMapping)
_WinAPI_CloseHandle($hFile)
If $iError Then Return SetError($iError, 0, 0)
EndFunc ;==>__ReturnGBT2