IopAddBugcheckTriageThread

NTSTATUS __stdcall IopAddBugcheckTriageThread(_ETHREAD *TriageThread){
  NTSTATUS v1; 
  int v3; 
  __int64 v4; 
  __int64 v5; 
  unsigned int v6; 
  void *v7; 
  unsigned int MaxValidMemorySize; 
  char *v9; 
  char *v10; 
  char *v11; 
  v1 = 0;
  v3 = 0;
  if( !KiIsAddressRangeValid((INT64)TriageThread, 2200i64) )
    return -1073741823;
  IoAddTriageDumpDataBlock(TriageThread, 0x898ui64);
  if( (*((_DWORD *)TriageThread + 30) & 0x20000) != 0 )
  {
    v4 = *((_QWORD *)TriageThread + 7);
    v5 = *((_QWORD *)TriageThread + 11);
    if( (unsigned __int64)(v4 - v5) >= 0x3FFF )
      v6 = 0x3FFF;
    else
      v6 = v4 - v5;
    v7 = (void *)((v5 + 7) & 0xFFFFFFFFFFFFFFF8ui64);
    MaxValidMemorySize = IopGetMaxValidMemorySize(v7, v6);
    if( MaxValidMemorySize )
      IoAddTriageDumpDataBlock(v7, MaxValidMemorySize);
  }
  v9 = (char *)TriageThread + 1200;
  v10 = (char *)*((_QWORD *)TriageThread + 150);
  v11 = v9;
  while( v10 && v10 != v9 && v3 < 10 )
  {
    ++v3;
    if( !KiIsAddressRangeValid((INT64)(v10 - 32), 208i64) || *((char **)v10 + 1) != v11 )
      return -1073741823;
    IopAddBugcheckTriageIrp((_IRP *)(v10 - 32), 1u);
    v11 = v10;
    v10 = *(char **)v10;
  }
  return v1;
}

Referenced by:

IopAddBugcheckPnpTriageData
IopAddBugcheckPnpWatchdogTriageData
IopAddBugcheckPowerTriageData
IopAddBugcheckTriageDataFromParameters
IopAddBugcheckTriageWorkQueue