gpt4 book ai didi

filesystems - 我可以使用 EFI 在本地文件系统上写入吗

转载 作者:行者123 更新时间:2023-12-04 14:26:09 28 4
gpt4 key购买 nike

我正在研究这个项目,以便在操作系统通过 EFI 应用程序启动后立即将文件写入本地文件系统。我需要知道这是否可能。如果是的话,请指导我一点。
谢谢

最佳答案

好的,我会好好提醒你...

  • 首先,您枚举系统中的所有 FS 协议(protocol)。
    EFI_BOOT_SERVICES* bs = ...;
    EFI_GUID sfspGuid = EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID;
    EFI_HANDLE* handles = NULL;
    UINTN handleCount = 0;

    efiStatus = bs->LocateHandleBuffer(ByProtocol,
    &sfspGuid,
    NULL,
    &handleCount,
    &handles);
  • 然后你遍历所有这些并为你找到的每个句柄打开 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL,然后你可以从句柄中获取设备路径并找出它是什么设备,什么分区等。如果驱动器/分区不是您要查找的,请跳过它并转到下一个句柄。或者,如果您不想弄乱 DP 解析它,您可以简单地尝试在每个分区(句柄)上打开文件,直到操作成功。
    for (index = 0; index < (int)handleCount; ++ index)
    {
    EFI_SIMPLE_FILE_SYSTEM_PROTOCOL* fs = NULL;

    efiStatus = bs->HandleProtocol(
    handles[index],
    &sfspGuid,
    (void**)&fs);
  • 您找到了您需要的分区的句柄。然后你打开卷。
    EFI_FILE_PROTOCOL* root = NULL;
    ...
    efiStatus = fs->OpenVolume(fs, &root);
  • 有一些函数可以枚举文件和文件夹等...但是如果您知道正确的文件路径,您可以立即打开它。
    EFI_FILE_PROTOCOL* token = NULL;

    efiStatus = root->Open(
    root,
    &token,
    L"myfolder\\token.bin",
    EFI_FILE_MODE_READ,
    EFI_FILE_READ_ONLY | EFI_FILE_HIDDEN | EFI_FILE_SYSTEM);

  • 在 EFI_FILE_PROTOCOL 下,您有一大堆函数可以对文件进行操作:
      EFI_FILE_OPEN         Open;
    EFI_FILE_CLOSE Close;
    EFI_FILE_DELETE Delete;
    EFI_FILE_READ Read;
    EFI_FILE_WRITE Write;
    EFI_FILE_GET_POSITION GetPosition;
    EFI_FILE_SET_POSITION SetPosition;
    EFI_FILE_GET_INFO GetInfo;
    EFI_FILE_SET_INFO SetInfo;
    EFI_FILE_FLUSH Flush;

    关于filesystems - 我可以使用 EFI 在本地文件系统上写入吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32324109/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com