public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Laszlo Ersek <lersek@redhat.com>
To: GN Keshava <keshava.gn@gmail.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@ml01.01.org>
Subject: Re: How to open a file by it's full path in UEFI
Date: Tue, 27 Sep 2016 11:16:20 +0200	[thread overview]
Message-ID: <e3127493-190e-ae4c-510c-c2613840890f@redhat.com> (raw)
In-Reply-To: <CABKwMduQK-P41=EG7cJtwA5XAnYsa-g=eryNXM=wWNWYdcSwMQ@mail.gmail.com>

On 09/27/16 11:03, GN Keshava wrote:
> Hi all,
> 
> 
> I'm trying to open a file from my UEFI application. The path of file is
> 
> fs1:/myfolder/myfile.txt
> 
> The code :
> 
> efiStatus = bs->LocateHandleBuffer(ByProtocol,
>                                    &sfspGuid,
>                                    NULL,
>                                    &handleCount,
>                                    &handles);
> 
> 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\\myfile.txt",
>         EFI_FILE_MODE_READ,
>         EFI_FILE_READ_ONLY | EFI_FILE_HIDDEN | EFI_FILE_SYSTEM);
> }
> 
> But using this method, I can only go through all the file system handles
> and open each volume and try opening my file.
> 
> But I want to give full path to my file and open it in it's volume.
> 
> How can I acheive this?
> Thanks.

If you have a complete device path, you can use gBS->LocateDevicePath()
with gEfiSimpleFileSystemProtocolGuid, to locate the handle with the
most specific device path (--> the longest device path prefix) with the
simple FS protocol installed on it. Then you can check if the remaining
device path (returned by the service) consist of nothing but one File
Path Media Device Path node. If so, you can open the simple FS protocol
on the handle found, then use that to open the file by pathname.

Laszlo



  parent reply	other threads:[~2016-09-27  9:16 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-27  9:03 How to open a file by it's full path in UEFI GN Keshava
2016-09-27  9:07 ` Andrew Fish
2016-09-27  9:28   ` GN Keshava
2016-09-27  9:16 ` Laszlo Ersek [this message]
2016-09-27  9:25   ` GN Keshava
2016-09-27  9:49     ` Laszlo Ersek
2016-09-27 10:46       ` GN Keshava
2016-09-27 11:17         ` Laszlo Ersek
2016-09-27 11:51           ` GN Keshava
2016-09-27 15:07             ` Carsey, Jaben
2016-09-27 15:13               ` Laszlo Ersek
2016-09-27 16:44             ` Jarlstrom, Laurie
2016-09-27 16:48               ` Andrew Fish
2016-09-27 16:56                 ` GN Keshava
2016-09-29 10:22               ` GN Keshava

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e3127493-190e-ae4c-510c-c2613840890f@redhat.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox