Ошибка приложения EFI Защита от записи

Я попытался выполнить некоторые операции записи/чтения в файловых системах, для которых я перечислил. Проблема в том, что когда я хочу записать в другие тома, а не в свой (fs0), он вернет WRITE PROTECTED Error.

 ... 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);
    }

Я также пробовал ShellCreateDirectory, ShellWriteFile. Действительно ли я могу получить доступ к записи на жесткий диск (pci) из приложения EFI?

РЕДАКТИРОВАТЬ:

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)

person Ali Sepehri-Amin    schedule 22.07.2020    source источник
comment
Помечены ли соответствующие протоколы BlockIo как ReadOnly (проверьте флаг BlockIo-›Media-›ReadOnly)?   -  person MiSimon    schedule 22.07.2020
comment
@MiSimon Я пытался, и это не только для чтения, но я все равно не могу писать   -  person Ali Sepehri-Amin    schedule 25.07.2020
comment
Итак, вы можете писать в fs0, верно? а другим писать нельзя?   -  person Alex    schedule 26.07.2020
comment
@AliSepehri-Amin, какие еще идентификаторы FS есть на вашей платформе?   -  person Alex    schedule 26.07.2020
comment
@Alex Да, я могу писать на fs0, но не на других. Тестировал на ПК с установленной Windows, у него 4 тома, fs1 это C:\\ Volume, fs2 D:\\, fs3 F:\\, fs4 E:\\. Я хочу писать на fs1, который является томом Windows C.   -  person Ali Sepehri-Amin    schedule 26.07.2020
comment
@Alex, даже с помощью командной строки Shell я не могу редактировать или удалять файлы в идентификаторах FS. он говорит либо «Защищено от записи», либо «Невозможно создать» при использовании mkdir   -  person Ali Sepehri-Amin    schedule 26.07.2020
comment
@ AliSepehri-Amin, вы уверены, что у этих томов есть идентификатор fs? Можете ли вы обновить свой вопрос скриншотом таблицы вашего устройства из оболочки uefi? Я предполагаю, что у вас только один FS0, а остальные BLK01...02 и т.д...   -  person Alex    schedule 27.07.2020
comment
Если вы обновите свой вопрос, предоставьте вывод команды оболочки драйверов efi, разделы Windows могут использовать NTFS, а не FAT32.   -  person MiSimon    schedule 27.07.2020
comment
@MiSimon Я добавил вывод   -  person Ali Sepehri-Amin    schedule 27.07.2020
comment
В списке есть драйвер NTFS (#86), этот драйвер может не иметь возможности записи в файловые системы.   -  person MiSimon    schedule 27.07.2020
comment
@MiSimon Может ли UEFI: NTFS работать с этим?   -  person Ali Sepehri-Amin    schedule 27.07.2020
comment
Если у вас есть драйвер, поддерживающий запись в NTFS, тогда да, взгляните на проект refind (rodsbooks.com/ refind), у них есть драйверы efi для многих файловых систем.   -  person MiSimon    schedule 27.07.2020


Ответы (1)


Мое обоснованное предположение заключается в том, что вы пытаетесь получить доступ к тому NTFS (поскольку вы говорили о разделах Windows), а NTFS не поддерживается UEFI (по умолчанию). По крайней мере, я не видел ни одной такой прошивки. UEFI поддерживает только файловые системы FAT32.

Если вы зайдете в оболочку UEFI на своей платформе, вы должны увидеть таблицу сопоставления (см. образец изображения ниже), если есть устройство с пометкой FS0. Это означает, что микропрограмма обнаружила диск, обнаружила раздел и смогла смонтировать файловую систему. Остальные тома помечены как BLK, что означает, что UEFI может предоставлять доступ только по протоколу BlockIO. Нет поддержки протокола FS.

Вот пример таблицы сопоставления

person Alex    schedule 27.07.2020
comment
Спасибо. Да, я тестировал том FAT32, и он отлично работал при создании папки. есть ли возможность писать на нтфс? как я упоминал выше о UEFI:NTFS? - person Ali Sepehri-Amin; 28.07.2020
comment
@AliSepehri-Amin Это я не знаю. Более новая прошивка UEFI с поддержкой NTFS. - person Alex; 28.07.2020