PiInitFirmwareResources
NTSTATUS __stdcall PiInitFirmwareResources(_LOADER_PARAMETER_BLOCK *LoaderBlock){
int FirmwareInformation;
int v2;
_LIST_ENTRY *p_FirmwareResourceList;
NTSTATUS v5;
PVOID v6;
_UNICODE_STRING *v7;
_LIST_ENTRY *Flink;
VOID *v9;
UINT64 CreateOptions;
UINT64 CreateOptionsa;
UINT64 CreateOptionsb;
UINT64 *Disposition;
UINT64 *Dispositiona;
UINT64 *Dispositionb;
UINT64 *Dispositionc;
UINT64 *Dispositiond;
_UNICODE_STRING KeyName;
_UNICODE_STRING GuidString;
PVOID BaseHandle;
PVOID Handle;
PVOID KeyHandle;
FirmwareInformation = (int)LoaderBlock->FirmwareInformation;
Handle = 0i64;
BaseHandle = 0i64;
*(_DWORD *)(&KeyName.MaximumLength + 1) = 0;
KeyHandle = 0i64;
GuidString = 0i64;
if( (FirmwareInformation & 1) == 0 )
return 0;
p_FirmwareResourceList = &LoaderBlock->FirmwareInformation.u.EfiInformation.FirmwareResourceList;
if( p_FirmwareResourceList->Flink == p_FirmwareResourceList )
return 0;
KeyName.Buffer = L"\\Registry\\Machine\\HARDWARE\\UEFI";
*(_DWORD *)&KeyName.Length = 4194366;
LODWORD(CreateOptions) = 0;
v5 = IopCreateRegistryKeyEx(&Handle, 0i64, &KeyName, 0xF003Fui64, CreateOptions, 0i64);
v6 = Handle;
v2 = v5;
if( v5 >= 0 )
{
KeyName.Buffer = L"ESRT";
*(_DWORD *)&KeyName.Length = 655368;
LODWORD(CreateOptionsa) = 0;
v2 = IopCreateRegistryKeyEx(&BaseHandle, Handle, &KeyName, 0xF003Fui64, CreateOptionsa, 0i64);
if( v2 >= 0 )
{
Flink = p_FirmwareResourceList->Flink;
if( p_FirmwareResourceList->Flink != p_FirmwareResourceList )
{
do
{
v2 = RtlStringFromGUID((_GUID *)&Flink[1], &GuidString, v7);
if( v2 < 0 )
break;
LODWORD(CreateOptionsb) = 0;
v2 = IopCreateRegistryKeyEx(&KeyHandle, BaseHandle, &GuidString, 0xF003Fui64, CreateOptionsb, 0i64);
RtlFreeAnsiString(&GuidString);
if( v2 < 0 )
break;
v9 = KeyHandle;
KeyName.Buffer = (wchar_t *)L"Type";
*(_DWORD *)&KeyName.Length = 655368;
LODWORD(Disposition) = 4;
ZwSetValueKey(KeyHandle, &KeyName, 0i64, 4ui64, &Flink[2], (UINT64)Disposition);
*(_DWORD *)&KeyName.Length = 1048590;
LODWORD(Dispositiona) = 4;
KeyName.Buffer = L"Version";
ZwSetValueKey(v9, &KeyName, 0i64, 4ui64, (char *)&Flink[2].Flink + 4, (UINT64)Dispositiona);
*(_DWORD *)&KeyName.Length = 3014700;
LODWORD(Dispositionb) = 4;
KeyName.Buffer = L"LowestSupportedVersion";
ZwSetValueKey(v9, &KeyName, 0i64, 4ui64, &Flink[2].Blink, (UINT64)Dispositionb);
*(_DWORD *)&KeyName.Length = 2490404;
LODWORD(Dispositionc) = 4;
KeyName.Buffer = (wchar_t *)L"LastAttemptVersion";
ZwSetValueKey(v9, &KeyName, 0i64, 4ui64, &Flink[3], (UINT64)Dispositionc);
*(_DWORD *)&KeyName.Length = 2359330;
LODWORD(Dispositiond) = 4;
KeyName.Buffer = (wchar_t *)L"LastAttemptStatus";
ZwSetValueKey(v9, &KeyName, 0i64, 4ui64, (char *)&Flink[3].Flink + 4, (UINT64)Dispositiond);
ZwClose((_HANDLE)v9);
Flink = Flink->Flink;
}
while( Flink != p_FirmwareResourceList );
v6 = Handle;
}
}
if( BaseHandle )
ZwClose((_HANDLE)BaseHandle);
}
if( v6 )
ZwClose((_HANDLE)v6);
return v2;
}Referenced by:
IopInitializePlugPlayServices