【问题标题】:EFI Application Erorr Write ProtectedEFI 应用程序错误写保护
【发布时间】:2020-11-11 16:49:03
【问题描述】:

我尝试对我列举的文件系统进行一些写/读操作。问题是当我想写入其他卷而不是我自己 (fs0) 时,它将返回 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)

【问题讨论】:

  • 对应的BlockIo协议是否标记为ReadOnly(检查BlockIo->Media->ReadOnly标志)?
  • @MiSimon 我试过了,它不是只读的,但我还是不能写
  • 所以,你可以写到 fs0,对吧?但你不能给别人写信?
  • @AliSepehri-Amin 您的平台上还有哪些其他 FS id?
  • 如果您更新您的问题,请提供“驱动程序”efi shell 命令的输出,Windows 分区可能使用 NTFS 而不是 FAT32。

标签: filesystems firmware uefi edk2


【解决方案1】:

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

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

【讨论】:

  • 谢谢。是的,我在 FAT32 卷上进行了测试,它在创建文件夹时运行良好。反正有在NTFS上写吗?正如我上面提到的 UEFI:NTFS?
  • @AliSepehri-Amin 我不知道。支持 NTFS 的较新 UEFI 固件。
猜你喜欢
  • 2021-07-08
  • 2021-07-14
  • 2015-12-04
  • 2010-12-15
  • 2011-04-06
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多