我正在开发这个项目,以便在操作系统通过 EFI 应用程序启动后立即将文件写入本地文件系统。我需要知道是否可能。如果是的话,请指导我一点。
谢谢
好吧,我会好好提醒你的……
-
首先枚举系统中的所有 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);
-
然后你遍历所有这些并为你找到的每个句柄打开 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)