IoRaiseInformationalHardError

VOID __fastcall IoRaiseInformationalHardError(_VACB_ARRAY_HEADER *VacbArrayHeader){
  UINT8 **v1; 
  INT64 v2; 
  INT64 v3; 
  UINT8 **v4; 
  int v5; 
  UINT64 v6; 
  _OWORD *PoolWithTag; 
  UINT8 *v8; 
  _KAPC *v9; 
  UINT64 v10; 
  unsigned __int8 v11; 
  unsigned __int64 v12; 
  void *v13; 
  __int64 v14; 
  int v15; 
  void *v16; 
  _QWORD *v17; 
  void *v18; 
  v3 = v2;
  v4 = v1;
  v5 = (int)VacbArrayHeader;
  if( IopInitSystemCompletedEnoughForReInitRoutines )
  {
    if( v2 )
    {
      if( (*(_DWORD *)(v2 + 1296) & 0x10) != 0 )
        return;
    }
    else if( (*((_DWORD *)KeGetCurrentThread() + 324) & 0x10) != 0 )
    {
      return;
    }
    if( (_DWORD)VacbArrayHeader != -1073741283
      && (_DWORD)VacbArrayHeader != -1073741500
      && (_DWORD)VacbArrayHeader != 1073741848
      && (v2 || stru_140C45C78.Header.SignalState < 25)
      && dword_140C45C9C <= 25 )
    {
      PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0x28ui64, 0x72456F49ui64);
      if( PoolWithTag )
      {
        *PoolWithTag = 0i64;
        PoolWithTag[1] = 0i64;
        *((_QWORD *)PoolWithTag + 4) = 0i64;
        *((_DWORD *)PoolWithTag + 4) = v5;
        if( v4 && *(_WORD *)v4 )
        {
          v8 = (UINT8 *)ExAllocatePoolWithTag(NonPagedPoolNx, *(unsigned __int16 *)v4, 0x72456F49ui64);
          if( !v8 )
          {
LABEL_40:
            ExFreePoolWithTag(PoolWithTag, 0);
            return;
          }
          *((_WORD *)PoolWithTag + 12) = *(_WORD *)v4;
          *((_WORD *)PoolWithTag + 13) = *(_WORD *)v4;
          *((_QWORD *)PoolWithTag + 4) = v8;
          memmove(v8, v4[1], *(unsigned __int16 *)v4);
        }
        if( v3 )
        {
          v9 = (_KAPC *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x58ui64, 0x4350414Bui64);
          if( v9 )
          {
            _InterlockedIncrement(&dword_140C45C9C);
            KeInitializeApc(
              (INT64)v9,
              v3,
              0i64,
              (INT64)SC_ENV::Free,
              0i64,
              (INT64)IopRaiseInformationalHardError,
              0,
              (INT64)PoolWithTag);
            KeInsertQueueApc(v9, 0i64, 0i64, 0i64);
            return;
          }
          goto LABEL_38;
        }
        KeAcquireSpinLockRaiseToDpc(&qword_140C45C70, v6);
        v12 = v11;
        if( stru_140C45C78.Header.SignalState >= 25
          || IopCurrentHardError
          && *((_DWORD *)PoolWithTag + 4) == *(_DWORD *)(IopCurrentHardError + 16)
          && ((v13 = (void *)*((_QWORD *)PoolWithTag + 4)) == 0i64 && !*(_QWORD *)(IopCurrentHardError + 32)
           || *((_WORD *)PoolWithTag + 12) == *(_WORD *)(IopCurrentHardError + 24)
           && !memcmp(v13, *(PVOID *)(IopCurrentHardError + 32), *((unsigned __int16 *)PoolWithTag + 12))) )
        {
LABEL_37:
          KxReleaseSpinLock(&qword_140C45C70);
          __writecr8(v12);
LABEL_38:
          v18 = (void *)*((_QWORD *)PoolWithTag + 4);
          if( v18 )
            ExFreePoolWithTag(v18, 0);
          goto LABEL_40;
        }
        v14 = qword_140C45C60;
        if( (__int64 *)qword_140C45C60 != &qword_140C45C60 )
        {
          v15 = *((_DWORD *)PoolWithTag + 4);
          do
          {
            if( v15 == *(_DWORD *)(v14 + 16) )
            {
              v16 = (void *)*((_QWORD *)PoolWithTag + 4);
              if( !v16 && !*(_QWORD *)(v14 + 32) )
                goto LABEL_37;
              if( *((_WORD *)PoolWithTag + 12) == *(_WORD *)(v14 + 24)
                && !memcmp(v16, *(PVOID *)(v14 + 32), *((unsigned __int16 *)PoolWithTag + 12)) )
              {
                goto LABEL_37;
              }
            }
            v14 = *(_QWORD *)v14;
          }
          while( (__int64 *)v14 != &qword_140C45C60 );
        }
        v17 = (_QWORD *)qword_140C45C68;
        if( *(__int64 **)qword_140C45C68 != &qword_140C45C60 )
          __fastfail(3u);
        *(_QWORD *)PoolWithTag = &qword_140C45C60;
        *((_QWORD *)PoolWithTag + 1) = v17;
        *v17 = PoolWithTag;
        qword_140C45C68 = (__int64)PoolWithTag;
        KeReleaseSemaphoreEx(&stru_140C45C78, 0i64, 1i64, v10);
        if( !byte_140C45C98 )
        {
          byte_140C45C98 = 1;
          ExQueueWorkItem(&IopHardError, DelayedWorkQueue);
        }
        KxReleaseSpinLock(&qword_140C45C70);
        __writecr8(v12);
      }
    }
  }
}

Referenced by:

FsRtlLogCcFlushError
MiCauseOverCommitPopup
PopTransitionSystemPowerStateEx