【问题标题】:How is data stored on disk? - EFI GUID数据如何存储在磁盘上? - EFI GUID
【发布时间】:2016-08-20 17:14:05
【问题描述】:

我之前在SuperUser 上发布了这个问题,但我觉得它更适合程序员。

如果我理解正确,根据 GPT,LBA 2 的前 16 个字节是磁盘上第一个分区的分区类型 GUID。在 Windows 磁盘管理中,第一个分区被指定为 EFI 系统分区。然而,经过进一步调查,EFI 系统分区的 GUID 为:

C12A7328-F81F-11D2-BA4B-00A0C93EC93B

但前 16 个字节告诉我其他情况:

28732AC1-1FF8-D211-BA4B-00A0C93EC93B

有趣的是,前 3 个部分充当小端,而其他 2 个部分是大端。

为什么会这样?

【问题讨论】:

  • 维基百科说because Microsoft
  • 所以我认为这会导致与其他软件不兼容?
  • 由于 GUID 以文本方式显示的方式是标准化的,我推断唯一直接访问数据的软件是 Microsoft 的启动管理器,其他所有软件都通过某种接口访问。

标签: guid endianness disk uefi guid-partition-table


【解决方案1】:

EFI_GUID 数据类型声明如下:

typedef struct {
  UINT32  Data1;
  UINT16  Data2;
  UINT16  Data3;
  UINT8   Data4[8];
} EFI_GUID;

因为原始 EFI 架构(IA64 LE 和 IA32e)默认是 little-endian,所以整数也是。我还没有真正看到大端机器上的 UEFI 实现,所以我不知道是否会存储标准 GUID。

【讨论】:

  • UEFI 规范指出“还应注意 EFI 中的 TimeLow、TimeMid、TimeHighAndVersion 字段被编码为小端。”因此任何假设的未来大端实现仍然需要遵守. GUID 的其余部分是大端序。
猜你喜欢
  • 2011-01-13
  • 2011-05-17
  • 2020-06-13
  • 2011-06-08
  • 2012-05-13
  • 2011-05-06
  • 2017-03-30
  • 2012-03-26
相关资源
最近更新 更多