Forum Discussion
'-------------------------------------------------------------------------------
Option Explicit
'-----------------------------------------------------------------------------
'From: http://smartbear.com/forums/forum/post/?mode=singleThread&thread=21d89356-06a5-42b0-aff9-0d4c6d58332e
'also: http://www.microsoft.com/whdc/system/platform/firmware/PECOFFdwn.mspx (http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx)
'also: http://blogs.msdn.com/b/ericlippert/archive/2005/04/20/binary-files-and-the-file-system-object-do-not-mix.aspx
'also: http://www.tek-tips.com/viewthread.cfm?qid=202173&page=534
Function GetExecutableBitness(ByVal strFullFileName)
Dim iOffset
Dim oValue
Dim Stream: Set Stream = CreateObject("ADODB.Stream")
Dim strHex
GetExecutableBitness = -1
Stream.Type = 1 ' Binary (adTypeBinary)
' Stream.Mode = 1 ' adModeRead
Stream.Open
Stream.LoadFromFile strFullFileName
Stream.Position = &H3C ' offset to segmented .EXE header start
iOffset = Stream.Read(4) ' ReadInt
strHex = AscB(MidB(iOffset, 2, 1)) & AscB(MidB(iOffset, 1, 1))
strHex = AscB(MidB(iOffset, 4, 1)) & AscB(MidB(iOffset, 3, 1)) & strHex
Log.Message "Segmented .EXE header starts at " & strHex & " (0x" & Hex(strHex) & "h)"
Stream.Position = strHex ' move to segmented .EXE header start
iOffset = Stream.Read(6)
strHex = Chr(AscB(MidB(iOffset, 1, 1))) & Chr(AscB(MidB(iOffset, 2, 1)))
'Log.Message "strHex = " & strHex
If ("PE" <> strHex) Then _
Log.Error(strFullFileName & " file does not contain the required 'PE' signature")
strHex = Hex(AscB(MidB(iOffset, 6, 1))) & Hex(AscB(MidB(iOffset, 5, 1)))
Log.Message "File image is of 0x" & strHex & "h type"
Stream.Close
Set Stream = Nothing
GetExecutableBitness = "0x" & strHex
End Function
'-----------------------------------------------------------------------------