EFI 应用程序错误写保护

EFI Application Erorr Write Protected

我尝试对我列举的文件系统进行一些 write/read 操作。问题是当我想写入其他卷而不是我自己的卷 (fs0) 时,它会 return WRITE PROTECTED 错误。

 ... Enumerated and opened all available volumes successfuly

 efiStatus = root->Open(root, &token, L"xxx", EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE, 0);
    
    if (efiStatus == EFI_SUCCESS)
    {
        char* myStr = "Sample Content";
        UINTN myStrSize = strlenEx(myStr);

        efiStatus = token->Write(token, &myStrSize, myStr);
        if (efiStatus != EFI_SUCCESS)
        {
            Print(L"[X] ! Error [%r]!\n", efiStatus);
        }
        Print(L"Found Some\n", efiStatus);
    }

我也尝试了 ShellCreateDirectoryShellWriteFile。我真的可以从 EFI 应用程序访问写入硬盘 (pci) 吗?

编辑:

drivers 命令输出:

                T   D
D           Y C I
R           P F A
V  VERSION  E G G #D #C DRIVER NAME                         IMAGE NAME
== ======== = = = == == =================================== ==========
43 00000014 D - -  1  - AMI USB Driver                      Uhcd
45 00000014 B - -  1  4 USB bus                             Uhcd
46 00000002 D - -  3  - USB Hid driver                      Uhcd
47 00000001 D - -  1  - USB Mass Storage driver             Uhcd
85 00010000 ? - -  -  - AMI ExFat Driver                    EXFAT
86 00010000 D - -  5  - AMI NTFS Driver                     NTFS
89 00000001 D - -  2  - <null string>                       MouseDriver
8B 00000001 B - -  1  3 AMI AHCI BUS Driver                 Ahci
8F 00000001 ? - -  -  - AMI NVMe BUS Driver                 Nvme
123 00000010 D - -  1  - Serial ATA Controller Initializatio SataController
12E 00000010 B - -  1  1 AMI Console Splitter Text Out Drive ConSplitter
12F 00000010 B - -  1  1 AMI Console Splitter Text In Driver ConSplitter
130 00000010 B - -  1  1 AMI Console Splitter Pointer Driver ConSplitter
133 00000010 D - -  1  - AMI Graphic Console Driver          GraphicsConsole
134 0000000A D - - 15  - Generic Disk I/O Driver             DiskIoDxe
135 0000000B B - -  3 11 Partition Driver(MBR/GPT/El Torito) PartitionDxe
137 00000000 ? - -  -  - Integrated Touch Driver             IntegratedTouch
13A 00000010 B - -  1  5 AMI Generic LPC Super I/O Driver    GenericSio
13C 00A50110 B - -  1 15 AMI PCI Bus Driver                  PciBus
13E 00000010 ? - -  -  - AMI PS/2 Driver                     Ps2Main
13F 00000000 ? - -  -  - DNS Network Service Driver          DnsDxe
140 00000000 ? - -  -  - DNS Network Service Driver          DnsDxe
145 0000000A D - -  2  - FAT File System Driver              Fat
147 00010001 ? - -  -  - AMI ISO9660 File System Driver      FsIso9660
149 00000001 ? - -  -  - <null string>                       PcieSataController
14A 00000001 ? - -  -  - <null string>                       PcieSataController
14B 0000001B B - -  1  3 Intel(R) RST 16.0.2.3402 RAID Drive RaidDriver
159 09000432 B - -  1  1 Intel(R) GOP Driver [9.0.1074]      MemoryMapped(0x3,0x845F3018,0x846040D8)

我有根据的猜测是您试图访问 NTFS 卷(因为您谈到了 Windows 分区)并且 NTFS 不支持 UEFI(默认情况下)。至少,我还没有看到任何固件。 UEFI 仅支持 FAT32 文件系统。

如果您在您的平台上进入 UEFI shell,您应该会看到 "映射 table"(请参见下面的示例图片),如果有是一个标记为 “FS0” 的设备。这表明固件检测到磁盘,发现了分区,并且能够挂载文件系统。其余标记为 BLK 的卷,这意味着 UEFI 只能使用 BlockIO 协议提供访问权限。不支持 FS 协议。