IopCopyBootLogRegistryToFile

VOID __stdcall IopCopyBootLogRegistryToFile(){
  INT64 v0; 
  _ETHREAD *CurrentThread; 
  INT64 v2; 
  unsigned int i; 
  NTSTATUS RegistryValue; 
  _KEY_VALUE_FULL_INFORMATION *v5; 
  PUNICODE_STRING v6; 
  PVOID Handle; 
  PVOID TimeFields; 
  _TIME_FIELDS TimeFields_8; 
  _LARGE_INTEGER LocalTime; 
  _KEY_VALUE_FULL_INFORMATION *Information; 
  _UNICODE_STRING String; 
  _STRING DestinationString; 
  _UNICODE_STRING KeyName; 
  _UNICODE_STRING v15; 
  INT8 pszDest[256]; 
  WCHAR SourceString[256]; 

  Handle = 0i64;
  TimeFields = 0i64;
  LocalTime.QuadPart = 0i64;
  KeyName = 0i64;
  TimeFields_8 = 0i64;
  DestinationString = 0i64;
  String = 0i64;
  v15 = 0i64;
  if( qword_140D2C030 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    ExAcquireResourceExclusiveLite((UINT64)&qword_140D2C030[4], 1, v0);
    IopBootLogToFile(qword_140D2C030 + 3);
    ExSystemTimeToLocalTime(&KeBootTime, &LocalTime);
    RtlTimeToTimeFields((INT64 *)&LocalTime, (WORD *)&TimeFields_8, v2);
    RtlStringCchPrintfA(pszDest, 0x100ui64, (INT8 *)"%2d %2d %4d %02d:%02d:%02d.%03d\r\n");
    RtlInitAnsiString(&DestinationString, pszDest);
    RtlAnsiStringToUnicodeString(&String, &DestinationString, 1u);
    IopBootLogToFile(&String);
    RtlFreeAnsiString(&String);
    if( IopOpenRegistryKey(&TimeFields, 0i64, &CmRegistryMachineSystemCurrentControlSetControlBootLog, 0xF003Fui64, 0) < 0 )
    {
      v6 = qword_140D2C030;
    }
    else
    {
      for( i = 0; i < LODWORD(qword_140D2C030[10].Buffer); ++i )
      {
        RtlStringCchPrintfW(SourceString, 0x100ui64, (WCHAR *)L"%d");
        RtlCreateUnicodeString((INT64)&KeyName, (INT8 *)SourceString);
        if( IopOpenRegistryKey(&Handle, TimeFields, &KeyName, 0xF003Fui64, 0) >= 0 )
        {
          Information = 0i64;
          RegistryValue = IopGetRegistryValue(Handle, (PWCHAR)&dword_1407CF120, 0x100ui64, &Information);
          v5 = Information;
          if( RegistryValue >= 0 )
          {
            RtlInitUnicodeString(&v15, (PCWSTR)((char *)Information + Information->DataOffset));
            IopBootLogToFile(&v15);
          }
          ExFreePoolWithTag(v5, 0);
          ZwDeleteKey(Handle);
          ZwClose((_HANDLE)Handle);
        }
      }
      ZwDeleteKey(TimeFields);
      ZwClose((_HANDLE)TimeFields);
      v6 = qword_140D2C030;
      BYTE4(qword_140D2C030[10].Buffer) = 1;
    }
    ExReleaseResourceLite((PERESOURCE)&v6[4]);
    KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
  }
}

Referenced by:

CmCompleteRegistryInitialization