2013-01-21 73 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

相关问题