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

2023-11-24

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


好吧,我会好好提醒你的……

  1. 首先枚举系统中的所有 FS 协议。

    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);
    
  2. 然后你遍历所有这些并为你找到的每个句柄打开 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);
    
  3. 您找到了所需分区的句柄。然后你打开音量。

    EFI_FILE_PROTOCOL* root = NULL;
    ...
    efiStatus = fs->OpenVolume(fs, &root);
    
  4. 有一些函数可以枚举文件和文件夹等...但是如果您知道正确的文件路径,则可以立即打开它。

    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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以使用 EFI 在本地文件系统上写入吗 的相关文章

  • Notepad++ 缓存文件位置

    在最新版本的 Notepad 上 当应用程序关闭时 重新启动应用程序时会保留未保存的文件 我认为这些文件缓存在临时文件中 该文件的位置是什么 谢谢 我自己注意到了 并在里面找到了文件backup文件夹 您可以检查它在哪里使用菜单 设置 gt
  • Xamarin.Forms 在文件系统中保存文件

    我尝试从网络下载文件并将其保存到任何 Environment SpecialFolder 位置 无论我尝试什么方法 我总是得到System UnauthorizedAccessException 访问路径 我尝试的任何可能路径 甚至超出En
  • Java 6 的 WatchService [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Java 7 推出WatchService用于连续监控文件系统 Java 6 有向后移植吗 是否有具有
  • 监视目录的更改 - 潜在的高内存

    我目前正在使用nodeJS 中的脚本来监视目录 及其子目录 并在将文件放置在那里后执行一些功能 实际上 这将是一个 FTP 用户上传文件 对其进行处理 然后删除 显然 我已经看到脚本的 CPU 使用量很高 因为它遍历目录 等待文件可见 但令
  • Linux:大型 int 数组:mmap 与查找文件?

    假设我有一个数据集 它是存储在 4TB HDD ext4 文件系统上的文件中的 1e12 32 位整数 4 TB 数组 考虑到数据很可能是随机的 或者至少看起来是随机的 pseudo code for long long i 0 i lt
  • 有没有办法立即检查目录是否正在使用?

    我想使用 Directory Move 移动目录及其所有子目录 不过 在此之前 我想检查该目录及其子目录中的任何文件和子文件是否正在被其他进程使用 然后 在移动之前 我想将目录锁定到其他进程 这样我就可以确保 Directory Move
  • 通过 FileSystem 对象从文件系统读取

    为了列出类路径上特定目录的文件内容 我正在使用新的FileSystem and PathJava 7 的功能 在一次部署中 目录直接存储在文件系统上 在另一个部署中 它存储在 JAR 文件中 我的方法适用于 JAR 文件 我创建了一个Fil
  • 有没有一种异步方式知道文件已更改?

    我想异步监视文件的任何更改 也就是说 当文件被修改 删除时 我希望在我的程序中进行回调 可能来自内核 该文件只是一个纯文本文件 我知道可以使用轮询机制来做到这一点 但我正在寻找一种基于事件的解决方案 我读到了有关 inotify 的内容 但
  • 我可以简单地“读取”正在使用的文件吗?

    我正在尝试使用 StreamReader 来读取文件 但它总是被另一个进程使用 所以我收到此错误 该进程无法访问该文件 arfjwknasgmed17 C FLAG CONDITION CP ARFJN FLAG XLS 因为 它正在被另一
  • Linux 上的监控/审计文件删除

    我的应用程序部门之一的 beam 文件之一正在被删除 我不确定删除的内容 方式 有没有办法监视或审核文件以查看删除该文件后会发生什么 我正在使用 RedHat 发行版 是的 您可以使用审核守护程序 你没有说哪个 Linux 发行版 基于Re
  • 在c#中查找编译类的源文件

    我正在寻找一组已编译的 net 程序集中特定类的关联源文件 e g MyAsm Namespace Foo gt C Source foo cs MyAsm Namespace Bar gt C Source Code MoreCode C
  • 使用 FileSystemWatcher 从文件中获取新行

    我正在观看一个包含以下代码的文件 FileSystemWatcher watcher new FileSystemWatcher watcher Path C watcher Filter t log watcher Changed new
  • 检查lua中是否存在目录?

    如何检查 lua 中是否存在目录 如果可能的话最好不使用 LuaFileSystem 模块 尝试做类似以下 python 行的事情 os path isdir path 这是一种在 Unix 和 Windows 上都适用的方式 无需任何外部
  • 如何在 Python 中重命名文件并保留创建日期

    我知道创建日期不存储在文件系统本身中 但是当我使用时我遇到了问题os rename 它正在更新我正在使用的文件的创建日期 是否可以重命名文件而不更改其原始创建日期 正如都铎所说 你可以使用os stat http docs python o
  • UEFI LoadImage 挂起

    我正在考虑使用 Bootservices 函数 LoadImage 从内存加载 UEFI 应用程序映像 函数参数为 typedef EFI STATUS LoadImage IN BOOLEAN BootPolicy IN EFI HAND
  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进
  • 使用 FileInputStream 时如何确定理想的缓冲区大小?

    我有一个从文件创建 MessageDigest 哈希 的方法 我需要对很多文件 gt 100 000 执行此操作 用于读取文件的缓冲区应该设置多大才能最大限度地提高性能 大多数人都熟悉基本代码 为了以防万一 我将在这里重复一遍 Messag
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • C语言中数据类型BYTE、WORD和DWORD的格式说明符?

    在 C 语言中 与 printf 和 scanf 函数一起使用的数据类型 BYTE WORD 和 DWORD 最合适的格式说明符是什么 我很难通过控制台显示 BPB 字段的值 例如 如果我尝试使用 lu 显示 BPB BytsPerSec
  • 如何在应用程序中从 Xcode 的“支持文件”组访问文件?

    我有一个应用程序 现在我几乎已经完成了 在数据输入流程结束时发送电子邮件 发送两个 pdf 文件 其中一个是根据输入的数据生成的 另一个是静态文件 在每个实例中都相同 第一个 pdf 生成正常 它已保存到应用程序的 文档 文件夹中 并且我已

随机推荐