I agree the code looks fine in the source, the code matches my UDK 2014, but it
doesn't work in the EFI Shell 1.0 during runtime.
I am currently installing the latest snapshot of EDKII/UDK, I will test it with
fresh code just in case something funny happened in my UDK folder or a recent
patch fixed the problem, but I think it will do the same thing since I have not
modified the UDK library in any way.
I'll post back once I figure out how to build the missing Win32 base tools
without build.exe :p (I'll figure it out..)
From: [email protected]
Date: Mon, 22 Sep 2014 16:05:23 -0700
To: [email protected]
Subject: Re: [edk2] ShellExecute crashing in NT emulator - [Bug Found]
On Sep 22, 2014, at 3:09 PM, J. E. <[email protected]> wrote:HiI am not
accessing it from my app, i am fixing a bug in udk2014.
It is hard to tell from your mail as you keep showing code fragments, and not a
diff or code fragment plus what file it came from.
My app is only calling ShellExecute. Try it yourself in helloworld, im sure if
you call shellexecute in an efi shell 1.0 it will crash
If we look at the EfiShellEnvironment2 protocol definition we see:
https://svn.code.sf.net/p/edk2/code/trunk/edk2/ShellPkg/Include/Protocol/EfiShellEnvironment2.htypedef
EFI_STATUS
(EFIAPI *SHELLENV_EXECUTE) (
IN EFI_HANDLE *ParentImageHandle,
IN CHAR16 *CommandLine,
IN BOOLEAN DebugOutput
);
And that would imply that ShellExecute() should be calling with ParentHandle
and not *ParentHandle in UefiShellLib.c
https://svn.code.sf.net/p/edk2/code/trunk/edk2/ShellPkg/Library/UefiShellLib/UefiShellLib.cEFI_STATUS
EFIAPI
ShellExecute (
IN EFI_HANDLE *ParentHandle,
IN CHAR16 *CommandLine OPTIONAL,
IN BOOLEAN Output OPTIONAL,
IN CHAR16 **EnvironmentVariables OPTIONAL,
OUT EFI_STATUS *Status OPTIONAL
)
{
EFI_STATUS CmdStatus;
//
// Check for UEFI Shell 2.0 protocols
//
if (gEfiShellProtocol != NULL) {
//
// Call UEFI Shell 2.0 version (not using Output parameter)
//
return (gEfiShellProtocol->Execute(ParentHandle,
CommandLine,
EnvironmentVariables,
Status));
}
//
// Check for EFI shell
//
if (mEfiShellEnvironment2 != NULL) {
//
// Call EFI Shell version.
// Due to oddity in the EFI shell we want to dereference the ParentHandle
here
//
CmdStatus = (mEfiShellEnvironment2->Execute(*ParentHandle,
CommandLine,
Output));
//
Thanks,
Andrew Fish
------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel