2013-01-21 90 views
0

我有一個文件正在上傳(一個* .wim文件,可以是32位或64位 - WAIK/WADK)。如何使用Java API確定文件是32位還是64位?

wim文件被複制到一個位置。

此前我們只支持32位,但現在爲了UEFI的目的,我們需要同時支持32位(用於BIOS)和64位(用於UEFI)。

現在,上傳完成後,意圖基於文件類型,我將其複製到32位或64位文件夾。

如何辨別它?

P.S:刪除了win標籤,因爲這更多的是文件類型的一般確定而不是WIM。

+0

不知道這些文件到底是什麼:如果大小可以被4整除而不是8,那麼它是一個32位文件。也許它有幫助。 – Burkhard

+0

這絕對取決於文件類型。 –

+0

@Burkhard - 但這隻適用於一種情況 - 如果文件可以被4和8整除(如果只有一個64位條目的文件就可以),該怎麼辦? – nickb

回答

2

如果我們不顧WIM問題,只是考慮找的架構,爲此,一個exe文件(可移植可執行)被編譯,這是比較簡單的:

  • 的文件必須使用兩個字節送出0x4d開始, 0x5a,相當於字符串「MZ」的ASCII編碼。
  • 在偏移量0x3c處,讀取4個字節的little-endian編碼以獲得PE頭的偏移量。
  • 在偏移量「PE header」處,應檢查四個字節0​​x50,0x45,0x00,0x00,等同於字符串「PE \ 0 \ 0」的ASCII編碼。
  • 緊跟着PE頭,你會發現一個20字節長的COFF文件頭。機器類型在COFF標題的兩個第一字節中被編碼(小尾數)。

與您的情況相關的可能是機器類型0x014c(i386)和0x8664(AMD64)。

有關更多詳細信息,可以從Microsoft here獲取PE規範。 2.3.1節列出了不同的機器類型。

您可能還有興趣檢查COFF標頭的特徵字段(最後兩個字節)以將該文件標識爲可執行文件(而不是例如DLL文件)。

+0

現在,我們來面對WIM問題:-) –

+1

我很確定沒有Java庫來讀取WIM文件。如果Java軟件在Windows機器上運行,最簡單的方法可能是從Java調用Windows工具將映像掛載到臨時目錄,通常使用java.io.File訪問內容,然後卸載映像。 – jarnbjo

相關問題