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