PiInitFirmwareResources
NTSTATUS __stdcall PiInitFirmwareResources(_LOADER_PARAMETER_BLOCK *LoaderBlock){
int v1;
NTSTATUS v2;
const _GUID *v4;
NTSTATUS v5;
HANDLE v6;
const _GUID *v7;
HANDLE v8;
PVOID Data;
PVOID Dataa;
PVOID Datab;
UINT64 DataSize;
UINT64 DataSizea;
UINT64 DataSizeb;
UINT64 DataSizec;
UINT64 DataSized;
struct _UNICODE_STRING ValueName;
struct _UNICODE_STRING GuidString;
HANDLE Handle;
HANDLE BaseHandle;
HANDLE KeyHandle;
v1 = *((_DWORD *)LoaderBlock + 66);
BaseHandle = 0i64;
Handle = 0i64;
*(_DWORD *)(&ValueName.MaximumLength + 1) = 0;
KeyHandle = 0i64;
GuidString = 0i64;
if( (v1 & 1) == 0 )
return 0;
v4 = (const _GUID *)((char *)LoaderBlock + 296);
if( *(const _GUID **)&v4->Data1 == v4 )
return 0;
ValueName.Buffer = L"\\Registry\\Machine\\HARDWARE\\UEFI";
*(_DWORD *)&ValueName.Length = 4194366;
LODWORD(Data) = 0;
v5 = IopCreateRegistryKeyEx(&BaseHandle, 0i64, &ValueName, 0xF003Fui64, (UINT64)Data, 0i64);
v6 = BaseHandle;
v2 = v5;
if( v5 >= 0 )
{
ValueName.Buffer = L"ESRT";
*(_DWORD *)&ValueName.Length = 655368;
LODWORD(Dataa) = 0;
v2 = IopCreateRegistryKeyEx(&Handle, BaseHandle, &ValueName, 0xF003Fui64, (UINT64)Dataa, 0i64);
if( v2 >= 0 )
{
v7 = *(const _GUID **)&v4->Data1;
if( *(const _GUID **)&v4->Data1 != v4 )
{
do
{
v2 = RtlStringFromGUID(v7 + 1, &GuidString);
if( v2 < 0 )
break;
LODWORD(Datab) = 0;
v2 = IopCreateRegistryKeyEx(&KeyHandle, Handle, &GuidString, 0xF003Fui64, (UINT64)Datab, 0i64);
RtlFreeAnsiString(&GuidString);
if( v2 < 0 )
break;
v8 = KeyHandle;
ValueName.Buffer = (wchar_t *)L"Type";
*(_DWORD *)&ValueName.Length = 655368;
LODWORD(DataSize) = 4;
ZwSetValueKey(KeyHandle, &ValueName, 0i64, 4ui64, (PVOID)&v7[2], DataSize);
*(_DWORD *)&ValueName.Length = 1048590;
LODWORD(DataSizea) = 4;
ValueName.Buffer = L"Version";
ZwSetValueKey(v8, &ValueName, 0i64, 4ui64, &v7[2].Data2, DataSizea);
*(_DWORD *)&ValueName.Length = 3014700;
LODWORD(DataSizeb) = 4;
ValueName.Buffer = L"LowestSupportedVersion";
ZwSetValueKey(v8, &ValueName, 0i64, 4ui64, v7[2].Data4, DataSizeb);
*(_DWORD *)&ValueName.Length = 2490404;
LODWORD(DataSizec) = 4;
ValueName.Buffer = (wchar_t *)L"LastAttemptVersion";
ZwSetValueKey(v8, &ValueName, 0i64, 4ui64, (PVOID)&v7[3], DataSizec);
*(_DWORD *)&ValueName.Length = 2359330;
LODWORD(DataSized) = 4;
ValueName.Buffer = (wchar_t *)L"LastAttemptStatus";
ZwSetValueKey(v8, &ValueName, 0i64, 4ui64, &v7[3].Data2, DataSized);
ZwClose(v8);
v7 = *(const _GUID **)&v7->Data1;
}
while( v7 != v4 );
v6 = BaseHandle;
}
}
if( Handle )
ZwClose(Handle);
}
if( v6 )
ZwClose(v6);
return v2;
}Referenced by:
IopInitializePlugPlayServices