IopInitializeBootLogging

VOID __stdcall IopInitializeBootLogging(_LOADER_PARAMETER_BLOCK *LoaderBlock, INT8 *HeaderString){
  struct _UNICODE_STRING *Pool_1; 
  struct _UNICODE_STRING *v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  wchar_t *Buffer; 
  PUNICODE_STRING v11; 
  unsigned __int16 Length; 
  unsigned __int16 v13; 
  BOOL v14; 
  PVOID *i; 
  struct _STRING SourceString; 
  PMESSAGE_RESOURCE_ENTRY v17; 
  v17 = 0i64;
  *(_DWORD *)(&SourceString.MaximumLength + 1) = 0;
  if( !qword_140D2C030 )
  {
    Pool_1 = (struct _UNICODE_STRING *)IopVerifierExAllocatePool_1(NonPagedPoolNx, 0xB0ui64);
    qword_140D2C030 = Pool_1;
    v5 = Pool_1;
    if( Pool_1 )
    {
      memset((INT64)Pool_1, 0i64);
      ExInitializeResourceLite((PERESOURCE)&v5[4]);
      ExAcquireResourceExclusiveLite((ERESOURCE *)&qword_140D2C030[4], 1u);
      v6 = *((_QWORD *)LoaderBlock + 2);
      v7 = -1i64;
      if( RtlFindMessage(*(PVOID *)(v6 + 48), 0xBui64, 0i64, 0xB5ui64, (INT64)&v17) >= 0 )
      {
        v8 = -1i64;
        SourceString.Buffer = (char *)v17->Text;
        do
          ++v8;
        while( v17->Text[v8] );
        SourceString.Length = v8;
        SourceString.MaximumLength = v8 + 1;
        RtlAnsiStringToUnicodeString(qword_140D2C030, &SourceString, 1u);
        if( qword_140D2C030->Length > 4u )
        {
          v9 = (unsigned __int16)(qword_140D2C030->Length - 4);
          Buffer = qword_140D2C030->Buffer;
          qword_140D2C030->Length = v9;
          Buffer[v9 >> 1] = 0;
        }
      }
      if( RtlFindMessage(*(PVOID *)(v6 + 48), 0xBui64, 0i64, 0xB6ui64, (INT64)&v17) < 0 )
      {
        v11 = qword_140D2C030;
      }
      else
      {
        SourceString.Buffer = (char *)v17->Text;
        do
          ++v7;
        while( v17->Text[v7] );
        SourceString.Length = v7;
        SourceString.MaximumLength = v7 + 1;
        RtlAnsiStringToUnicodeString(qword_140D2C030 + 1, &SourceString, 1u);
        v11 = qword_140D2C030;
        Length = qword_140D2C030[1].Length;
        if( Length > 4u )
        {
          v13 = Length - 4;
          qword_140D2C030[1].Length = v13;
          v11[1].Buffer[(unsigned __int64)v13 >> 1] = 0;
        }
      }
      RtlCreateUnicodeStringFromAsciiz(v11 + 3, HeaderString + 1);
      LOBYTE(v14) = 1;
      ExAcquireResourceSharedLite(&PsLoadedModuleResource, v14);
      for( i = (PVOID *)PsLoadedModuleList; i != &PsLoadedModuleList; i = (PVOID *)*i )
        IopBootLog((UNICODE_STRING *)(i + 9), 1u);
      ExReleaseResourceLite(&PsLoadedModuleResource);
      ExReleaseResourceLite((PERESOURCE)&qword_140D2C030[4]);
    }
  }
}

Referenced by:

Phase1InitializationDiscard