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