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