2015-09-01 118 views
4

我正在開發此項目,以便在OS啓動時通過EFI應用程序將文件寫入本地文件系統。我需要知道這是否可能。如果是的話,請引導我一點。 感謝我可以使用EFI在本地文件系統上寫入我使用EFI

+0

很難明白你到底需要,誰寫在哪裏。操作系統啓動時,UEFI已經消失。如果您需要從UEFI寫入FS,那麼答案是「是」,但有一個限制:FS必須是UEFI本機支持的FAT32;例如,如果你有NTFS,就開源而言,據我所知,只有UEFI的只讀NTFS驅動程序。至於指南,啓動EFI_FILE_PROTOCOL – Alex

+0

好吧,我明白你在說什麼。我的觀點是我想寫一個應用程序(EFI),將文本文件或可執行文件複製到文件系統。我應該如何去做呢? – Asak

+0

我沒有看到任何問題。使用我在第一條評論中說的協議。 – Alex

回答

7

好吧,我給你一個很好的擡起頭來......

  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; 
+1

好吧,這是我所遇到的程序的最好解釋至今。非常感謝。有效。 – Asak

+0

@Asak非常歡迎 – Alex

+0

好的解釋,@Alex,對於初學者來說,這不僅適用於SFSP,也適用於理解如何處理UEFI FS。我認爲你可以在[documentation](http://stackoverflow.com/documentation)中寫下關於UEFI的文章:) – GNKeshava

相關問題