Re: OpenProtocol() giving me EFI_INVALID_PARAMETER

Andrew Fish

On Jul 17, 2021, at 9:41 AM, Ethin Probst <> wrote:

Hey all,

So my UsbAudio.efi app has hit a bit of a roadblock. This code:

status = st->BootServices->OpenProtocol(handles[i],
&gEfiUsbIoProtocolGuid, (void**)&UsbIo, imageHandle, NULL,
if (EFI_ERROR(status)) {
Print(L"%r, skipping\n", status);
How are you constructing handle[]? Could it have gotten stale? You could print out the value of handle[I] on the failure.

The contents of a handle are not defined, but the current implementation is a pointer to an IHANDLE internal data structure in the DXE Core. If you are at the UEFI Shell and you `dh -v <handleNum> it will show the <handleNum> and the value.

Shell> dh -v 98
98: 6d5CF18

I think you can `dh -p UsbIo’ to get the list of the UsbIo handles.

So you can poke around and see what is happening on that handle.

I guess the handle[] array could be getting corrupted? So you could check for that?


Andrew Fish

Is giving me EFI_INVALID_PARAMETER and I don’t know why. I don't think
I'm violating any of its constraints, according to the specification,
and I haven't touched this code since it was written. It also happens
irregularly: sometimes it happens on the USB audio streaming device,
or if I have a device plugged in it might happen on that device, you
get the idea. But it doesn't consistently fail. Does anybody have any
idea what's going on?

Ethin D. Probst

Join to automatically receive all group messages.