MiLogFailedDriverLoad

VOID __stdcall MiLogFailedDriverLoad(
        UNICODE_STRING *ImageFileName,
        UNICODE_STRING *MissingDriverName,
        INT8 *MissingProcedureName,
        INT64 Status,
        INT64 Statusa){
  int v5; 
  __int64 v6; 
  unsigned int v7; 
  int v8; 
  unsigned int v9; 
  __int64 v10; 
  __int64 v11; 
  int v12; 
  UNICODE_STRING v13; 
  int v14; 
  int v15; 
  unsigned int v16; 
  __int64 v17; 
  _WORD *v18; 
  UINT8 *v19; 
  UINT8 **p_Buffer; 
  UINT64 v21; 
  UINT8 *v22; 
  struct _UNICODE_STRING UnicodeString; 
  struct _STRING DestinationString; 
  UNICODE_STRING v25; 
  __int16 v26; 
  const wchar_t *v27; 
  UNICODE_STRING v28; 
  struct _UNICODE_STRING v29; 
  v5 = ImageFileName->Length + 2;
  DestinationString = 0i64;
  v6 = -1i64;
  v7 = Status;
  v8 = 0;
  v9 = 0;
  LODWORD(v10) = 1;
  v25 = *ImageFileName;
  UnicodeString = 0i64;
  if( !MissingDriverName
    || (_DWORD)Status != -1073741702 && (_DWORD)Status != -1073741772 && (unsigned int)(Status + 1073741214) > 1 )
  {
    goto LABEL_14;
  }
  v11 = -1i64;
  v27 = L"cannot find";
  do
    ++v11;
  while( aCannotFind[v11] );
  v12 = 2 * v11;
  v13 = *MissingDriverName;
  v14 = v12 + MissingDriverName->Length;
  v26 = v12;
  v10 = 3i64;
  v5 += v14 + 4;
  v28 = v13;
  if( MissingProcedureName )
  {
    if( ((unsigned __int64)MissingProcedureName & 0xFFFFFFFFFFFF0000ui64) != 0 )
    {
      RtlInitAnsiString(&DestinationString, MissingProcedureName, (INT8)MissingProcedureName);
      v10 = 4i64;
      if( RtlAnsiStringToUnicodeString(&UnicodeString, &DestinationString, 1u) < 0 )
        v8 = 1;
      v5 += UnicodeString.Length + 2;
      v29 = UnicodeString;
    }
    else
    {
      v9 = (unsigned int)MissingProcedureName;
    }
    if( v8 == 1 )
    {
LABEL_14:
      v9 = v7;
      v27 = L"failed to load";
      do
        ++v6;
      while( aFailedToLoad[v6] );
      v15 = 2 * v6;
      v10 = (unsigned int)(v10 + 1);
      v26 = v15;
      v5 += v15 + 2;
      v7 = (unsigned int)MiIsRetryIoStatus(v7, 0x1000ui64) != 0 ? -1073741670 : -1073741204;
    }
  }
  v16 = v5 + 48;
  if( v16 < 0xFF )
  {
    IoAllocateGenericErrorLogEntry(v16);
    v18 = (_WORD *)v17;
    if( v17 )
    {
      *(_DWORD *)(v17 + 12) = 1073741850;
      v19 = (UINT8 *)(v17 + 48);
      *(_DWORD *)(v17 + 20) = v7;
      *(_DWORD *)(v17 + 16) = v9;
      *(_WORD *)(v17 + 6) = 48;
      if( (_DWORD)v10 )
      {
        p_Buffer = (UINT8 **)&v25.Buffer;
        do
        {
          v21 = *((unsigned __int16 *)p_Buffer - 4);
          memmove(v19, *p_Buffer, v21);
          p_Buffer += 2;
          v22 = &v19[2 * (v21 >> 1)];
          *(_WORD *)v22 = 32;
          v19 = v22 + 2;
          --v10;
        }
        while( v10 );
      }
      *((_WORD *)v19 - 1) = 0;
      v18[2] = 1;
      IoWriteErrorLogEntry(v18);
    }
  }
  RtlFreeAnsiString(&UnicodeString);
}

Referenced by:

MiCreateSectionForDriver
MiResolveImageReferences
MmLoadSystemImageEx