From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 5654A1A1E0B for ; Tue, 27 Sep 2016 09:44:22 -0700 (PDT) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga102.fm.intel.com with ESMTP; 27 Sep 2016 09:44:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.30,405,1470726000"; d="txt'?scan'208";a="1037201775" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga001.jf.intel.com with ESMTP; 27 Sep 2016 09:44:21 -0700 Received: from FMSMSX110.amr.corp.intel.com (10.18.116.10) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 27 Sep 2016 09:44:20 -0700 Received: from fmsmsx104.amr.corp.intel.com ([169.254.3.169]) by FMSMSX110.amr.corp.intel.com ([169.254.14.41]) with mapi id 14.03.0248.002; Tue, 27 Sep 2016 09:44:21 -0700 From: "Jarlstrom, Laurie" To: GN Keshava , Laszlo Ersek CC: "edk2-devel@lists.01.org" Thread-Topic: [edk2] How to open a file by it's full path in UEFI Thread-Index: AQHSGJ4foZJ9Ak0510qNQaxXJRm6waCNg7oAgAACgQCAAAavgIAAD/SAgAAIpYCAAAmuAP//3AUg Date: Tue, 27 Sep 2016 16:44:20 +0000 Message-ID: <10380531DF222B45964BE3E93EFE5F045D229577@fmsmsx104.amr.corp.intel.com> References: <765021a6-cea7-ba5f-58cf-5e8fce05bbf2@redhat.com> <87d54199-6065-47e4-b3f8-04fd6f93220f@redhat.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZWMzNmRkODQtODIxZC00NDYyLTk3NzQtMWJhZjEzYTlkZDUxIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6ImZxalFmajc3TGk2SFc1bG5CdHJKOWlIaFZiS0h1K1lld2RVMDNqS1B4aVU9In0= x-ctpclassification: CTP_IC x-originating-ip: [10.1.200.108] MIME-Version: 1.0 Subject: Re: How to open a file by it's full path in UEFI X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Sep 2016 16:44:22 -0000 X-Groupsio-MsgNum: 2223 Content-Language: en-US Content-Type: multipart/mixed; boundary="_003_10380531DF222B45964BE3E93EFE5F045D229577fmsmsx104amrcor_" --_003_10380531DF222B45964BE3E93EFE5F045D229577fmsmsx104amrcor_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Keshava, Attached Sample code is an example that will open a file name passed throu= gh the command line using the Shell. thanks, Laurie =A0 laurie.jarlstrom@intel.com Intel SSG/STO/EBP (503) 712-9395 -----Original Message----- From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of GN K= eshava Sent: Tuesday, September 27, 2016 4:52 AM To: Laszlo Ersek Cc: edk2-devel@lists.01.org Subject: Re: [edk2] How to open a file by it's full path in UEFI Thank you Laszlo. I'll check it out. :) Thanks again. Regards, Keshava On Tue, 27 Sep 2016 at 16:47 Laszlo Ersek wrote: > On 09/27/16 12:46, GN Keshava wrote: > > Hi Laszlo, > > > > Thank you for the answer. It was helpful. > > > > Considering option #1, can you give some more details (a small=20 > > example or any reference link would be helpful), how I can use Shell=20 > > APIs in my C file (which will compile to my .efi app)? > > Hmmm, I don't have hands-on experience with this, but you might want=20 > to try the ShellOpenFileByName() function, from=20 > "ShellPkg/Include/Library/ShellLib.h". > > You can find examples for UEFI applications that use the Shell library > with: > > git grep -w ShellLib -- '*inf' > > or just grep the tree for ShellOpenFileByName(). > > See also "AppPkg/ReadMe.txt". > > > Considering option #2, How I can find device path programatically=20 > > from my C file? > > The EFI_SHELL_PROTOCOL.GetDevicePathFromMap() member function seems=20 > relevant -- it is specified in the UEFI Shell spec --, but I would=20 > definitely try ShellOpenFileByName() first. > > Thanks > Laszlo > > > Thanks again for the help. :) > > With regards, > > Keshava > > > > On Tue, 27 Sep 2016 at 15:19 Laszlo Ersek > > wrote: > > > > On 09/27/16 11:25, GN Keshava wrote: > > > Hi Laszlo, > > > > > > Thanks for the reply. I meant I have complete file path. I=20 > > believe > the > > > "device path" is different. Is it possible to obtain DevicePath > > using my > > > full file path? > > > > The pathname you seem to have (as "complete") is specific to a give= n > > simple FS, so system-wide it cannot be considered complete=20 > > (there > can be > > multiple filesystems). > > > > In your original email I missed that you started with "FS1:". > Andrew's > > answer covers that case. > > > > In summary, you can do three things: > > - have a pathname that starts with FSx: (which is a shell-specific > > mapping), and use Andrew's recommendation, > > - have a complete UEFI device path, and then use what I recommended= , > > - have no information for selecting the filesystem (from the many > > possible), and use your current iteration. > > > > Options #1 and #2 actually correspond to each other, considering > > "expressive power" / information content (as long as you are in the > > shell); please see the MAP shell command. > > > > Thanks > > Laszlo > > > > > On Tue, 27 Sep 2016 at 14:46 Laszlo Ersek > > > > >> wrote: > > > > > > On 09/27/16 11:03, GN Keshava wrote: > > > > Hi all, > > > > > > > > > > > > I'm trying to open a file from my UEFI application. The pat= h > of > > > file is > > > > > > > > fs1:/myfolder/myfile.txt > > > > > > > > The code : > > > > > > > > efiStatus =3D bs->LocateHandleBuffer(ByProtocol, > > > > &sfspGuid, > > > > NULL, > > > > &handleCount, > > > > &handles); > > > > > > > > for (index =3D 0; index < (int)handleCount; ++ index) > > > > { > > > > EFI_SIMPLE_FILE_SYSTEM_PROTOCOL* fs =3D NULL; > > > > > > > > efiStatus =3D bs->HandleProtocol( > > > > handles[index], > > > > &sfspGuid, > > > > (void**)&fs); > > > > > > > > EFI_FILE_PROTOCOL* root =3D NULL; > > > > ... > > > > efiStatus =3D fs->OpenVolume(fs, &root); > > > > > > > > EFI_FILE_PROTOCOL* token =3D NULL; > > > > > > > > efiStatus =3D 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 F= S > > protocol > > > on the handle found, then use that to open the file by > pathname. > > > > > > Laszlo > > > > > > > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel --_003_10380531DF222B45964BE3E93EFE5F045D229577fmsmsx104amrcor_ Content-Type: text/plain; name="SFA.inf.txt" Content-Description: SFA.inf.txt Content-Disposition: attachment; filename="SFA.inf.txt"; size=1310; creation-date="Thu, 12 May 2016 18:41:57 GMT"; modification-date="Wed, 22 Jun 2011 22:04:40 GMT" Content-Transfer-Encoding: base64 Iy8qKiBAZmlsZQ0KIyAgU2FtcGxlIFVFRkkgQXBwbGljYXRpb24gUmVmZXJlbmNlIEVES0lJIE1v ZHVsZQ0KIw0KIyAgVGhpcyBpcyBhIHNpbXBsZSBzaGVsbCBhcHBsaWNhdGlvbg0KIw0KIyAgQ29w eXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4NCiMNCiMgIEFsbCByaWdodHMgcmVz ZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiMgIGFy ZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KIyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmli dXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQojICBo dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQojICBUSEUgUFJP R1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBC QVNJUywNCiMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJ TkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQojDQojDQojKiovDQoNCltEZWZpbmVzXQ0K ICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1DQogIEJBU0VfTkFN RSAgICAgICAgICAgICAgICAgICAgICA9IFNhbXBsZUZpbGVBDQogIEZJTEVfR1VJRCAgICAgICAg ICAgICAgICAgICAgICA9IDEwQzc1QzAwLTMwNTItNDQ2Ny05RUQ4LTcxOTZDQUFGNjEwRg0KICBN T0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBVRUZJX0FQUExJQ0FUSU9ODQogIFZFUlNJ T05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KICBFTlRSWV9QT0lOVCAgICAgICAgICAg ICAgICAgICAgPSBVZWZpTWFpbg0KDQojDQojIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMg Zm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWlyZWQgYnkgdGhlIGJ1aWxkIHRvb2xzLg0K Iw0KIyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NCBJUEYgRUJDDQoj DQoNCltTb3VyY2VzXQ0KICBTYW1wbGVGaWxlQS5jDQoNCltQYWNrYWdlc10NCiAgTWRlUGtnL01k ZVBrZy5kZWMNCiAgU2hlbGxQa2cvU2hlbGxQa2cuZGVjDQoNCltMaWJyYXJ5Q2xhc3Nlc10NCiAg VWVmaUFwcGxpY2F0aW9uRW50cnlQb2ludA0KICBVZWZpTGliDQogIFNoZWxsTGliDQogIA0KW0d1 aWRzXQ0KDQpbUHBpc10NCg0KW1Byb3RvY29sc10NCg0KW0ZlYXR1cmVQY2RdDQoNCltQY2RdDQo= --_003_10380531DF222B45964BE3E93EFE5F045D229577fmsmsx104amrcor_ Content-Type: text/plain; name="SFA.c.txt" Content-Description: SFA.c.txt Content-Disposition: attachment; filename="SFA.c.txt"; size=2521; creation-date="Thu, 12 May 2016 18:41:57 GMT"; modification-date="Wed, 22 Jun 2011 22:23:02 GMT" Content-Transfer-Encoding: base64 LyoqIEBmaWxlDQogIFRoaXMgaXMgYSBzaW1wbGUgc2hlbGwgYXBwbGljYXRpb24NCg0KICBDb3B5 cmlnaHQgKGMpIDIwMDgsIEludGVsIENvcnBvcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIEFsbCByaWdodHMgcmVzZXJ2ZWQu IFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgICAgICAgICAgICAg ICAgICAgICAgICAgIA0KICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UgICAgICAgICANCiAgd2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBs aWNlbnNlIG1heSBiZSBmb3VuZCBhdCAgICAgICAgDQogIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9s aWNlbnNlcy9ic2QtbGljZW5zZS5waHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIA0KDQogIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0Qg TElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCAgICAgICAgICAgICAgICAgICAgIA0KICBXSVRI T1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQ UkVTUyBPUiBJTVBMSUVELiAgICAgICAgICAgICANCg0KKiovDQoNCiNpbmNsdWRlIDxCYXNlLmg+ DQojaW5jbHVkZSA8VWVmaS5oPg0KDQojaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KDQoj aW5jbHVkZSA8TGlicmFyeS9VZWZpQXBwbGljYXRpb25FbnRyeVBvaW50Lmg+DQojaW5jbHVkZSA8 TGlicmFyeS9VZWZpTGliLmg+DQojaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFi bGVMaWIuaD4NCg0KI2luY2x1ZGUgPExpYnJhcnkvU2hlbGxMaWIuaD4gIC8vIHVzZXMgU2hlbGwg Z2xvYmFscyBnU1AgYW5kIGdTUFANCi8vI2luY2x1ZGUgPFByb3RvY29sL0VmaVNoZWxsUGFyYW1l dGVycy5oPg0KDQoNCg0KLyoqDQogIGFzIHRoZSByZWFsIGVudHJ5IHBvaW50IGZvciB0aGUgYXBw bGljYXRpb24uDQoNCiAgQHBhcmFtW2luXSBJbWFnZUhhbmRsZSAgICBUaGUgZmlybXdhcmUgYWxs b2NhdGVkIGhhbmRsZSBmb3IgdGhlIEVGSSBpbWFnZS4gIA0KICBAcGFyYW1baW5dIFN5c3RlbVRh YmxlICAgIEEgcG9pbnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZS4NCiAgDQogIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgVGhlIGVudHJ5IHBvaW50IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxs eS4NCiAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICBTb21lIGVycm9yIG9jY3VycyB3aGVuIGV4 ZWN1dGluZyB0aGlzIGVudHJ5IHBvaW50Lg0KDQoqKi8NCkVGSV9TVEFUVVMNCkVGSUFQSQ0KVWVm aU1haW4gKA0KICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCiAgSU4gRUZJX1NZ U1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQogICkNCnsNCg0KICAgIEVGSV9TVEFUVVMgICAgICBT dGF0dXM7DQogICAgVUlOVE4JCQlBcmdjOw0KCUNIQVIxNgkJCSoqQXJndjsNCiAgICBTSEVMTF9G SUxFX0hBTkRMRSBIYW5kbGU7DQoNCglpZiAoZ1NQUCAhPSBOVUxMKSB7DQogICAgICAvLw0KICAg ICAgLy8gdXNlIHNoZWxsIDIuMCBpbnRlcmZhY2UNCiAgICAgIC8vDQogICAgICAgIEFyZ2MgPSBn U1BQLT5BcmdjOw0KICAgICAgICBBcmd2ID0gZ1NQUC0+QXJndjsNCg0KCX1lbHNlIHsgLy8gZXJy b3Igb3V0IGlmIHNoZWxsIGludGVyZmFjZSBub3Qgc3VwcG9ydGVkIE5PVEUgb25seSBVRUZJIFNo ZWxsIDIuMCBzdXBwb3J0ZWQgaGVyZQ0KCQlQcmludChMIkFyZ2MgLyBBcmd2IG5vdCBzdXBwb3J0 ZWQgd2l0aCB0aGlzIGFwcGxpY2F0aW9uIG9uIEVGSSBTaGVsbCAxLjBcbiBQbGVhc2UgdXNlIFVF RkkgU2hlbGwgMi4wXG4iKTsNCgkgICAgcmV0dXJuIChFRklfVU5TVVBQT1JURUQpOw0KCX0NCg0K CWlmIChBcmdjIDw9IDEpew0KCQlQcmludChMIk5vIGZpbGUgbmFtZSB0byBvcGVuXG4iKTsNCgkJ cmV0dXJuIChFRklfVU5TVVBQT1JURUQpOyAgLy9uZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25lIHBh cmFtZXRlcg0KCX0NCg0KCVByaW50KEwiRmlsZSB0byBvcGVuIGlzOiAlc1xuIiwgQXJndlsxXSk7 DQoNCglTdGF0dXMgPSBnU1AtPk9wZW5GaWxlQnlOYW1lIChBcmd2WzFdLCAmSGFuZGxlLCANCgkJ RUZJX0ZJTEVfTU9ERV9SRUFEIHwgRUZJX0ZJTEVfTU9ERV9XUklURSB8IEVGSV9GSUxFX01PREVf Q1JFQVRFKTsNCg0KCWlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KCQlQcmludChMIlxuRmlsZSBP cGVuIGRpZCBub3Qgd29yayAlc1xuIiwgQXJndlsxXSk7DQoJCXJldHVybiAoU3RhdHVzKTsNCgl9 ZWxzZXsNCiAgICAgICAgUHJpbnQoTCJcbkZpbGUgT3BlbiB3b3JrZWQgJXNcbiIsIEFyZ3ZbMV0p Ow0KCSAgICBnU1AtPkNsb3NlRmlsZShIYW5kbGUpOw0KCX0NCg0KCXJldHVybiBFRklfU1VDQ0VT UzsNCn0NCg0KDQoNCg== --_003_10380531DF222B45964BE3E93EFE5F045D229577fmsmsx104amrcor_--