IoSteerInterrupt
INT64 __fastcall IoSteerInterrupt(INT64 a1, INT64 a2){
unsigned int v3;
int v4;
ULONG_PTR v5;
__int64 v6;
__int64 v7;
INT64 v8;
INT16 v9;
__int16 *v11;
_WORD *v12;
__int64 v13;
__int64 v14;
void *v15;
ULONG_PTR v16;
__int64 v17;
__int64 v18;
__int64 v19;
__int64 v20;
__int64 v21;
__int64 v22;
__int64 v23;
__int64 v24;
__int64 v25;
__int64 v26;
__int64 v27;
v3 = -1073741823;
if( KeGetCurrentIrql() )
KeBugCheckEx(0x121u, 1ui64, KeGetCurrentIrql(), 0i64, 0i64);
if( !a1 || !a2 )
goto LABEL_76;
if( !*(_DWORD *)a1 )
{
v4 = *(_DWORD *)a2;
if( *(int *)a2 < 2 && (v4 != 1 || *(_QWORD *)(a2 + 16)) )
{
v5 = *(_QWORD *)(a1 + 16);
if( v5 )
{
v6 = *(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64);
if( v6 && (*(_DWORD *)(v6 + 396) & 0x20000) == 0 )
{
if( *(_DWORD *)(a1 + 8) != 1 )
{
if( *(_DWORD *)(a1 + 8) == 2 )
{
v7 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 296i64) + 112i64;
goto LABEL_21;
}
if( *(_DWORD *)(a1 + 8) == 3 )
{
v7 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 24i64);
goto LABEL_21;
}
if( *(_DWORD *)(a1 + 8) != 4 )
return(unsigned int)-1073741637;
}
v7 = *(_QWORD *)(a1 + 24);
LABEL_21:
if( *(_DWORD *)(*(_QWORD *)(v7 + 384) + 88i64) == *(_DWORD *)(v7 + 88) )
{
if( v4 == 1 )
{
v8 = *(_QWORD *)(a2 + 16);
v9 = *(_WORD *)(a2 + 8);
}
else
{
if( v4 )
return v3;
v9 = 0;
v8 = 0i64;
}
return(unsigned int)KeIntSteerAssignCpuSet(*(_QWORD *)(v7 + 384), v9, v8);
}
LABEL_76:
__fastfail(5u);
}
IoAddTriageDumpDataBlock((PVOID)v5, *(unsigned __int16 *)(v5 + 2));
v5 = *(_QWORD *)(a1 + 16);
v11 = *(__int16 **)(v5 + 8);
if( v11 )
{
IoAddTriageDumpDataBlock(v11, (unsigned int)v11[1]);
v5 = *(_QWORD *)(a1 + 16);
v12 = (_WORD *)(*(_QWORD *)(v5 + 8) + 56i64);
if( *v12 )
{
IoAddTriageDumpDataBlock(v12, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 8i64) + 64i64),
*(unsigned __int16 *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 8i64) + 56i64));
v5 = *(_QWORD *)(a1 + 16);
}
}
if( v5 )
v13 = *(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64);
else
v13 = 0i64;
if( v13 )
{
if( v5 )
v14 = *(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64);
else
v14 = 0i64;
if( v5 )
v15 = *(void **)(*(_QWORD *)(v5 + 312) + 40i64);
else
v15 = 0i64;
IoAddTriageDumpDataBlock(v15, 0x310ui64);
if( *(_WORD *)(v14 + 40) )
{
IoAddTriageDumpDataBlock((PVOID)(v14 + 40), 2ui64);
IoAddTriageDumpDataBlock(*(PVOID *)(v14 + 48), *(unsigned __int16 *)(v14 + 40));
}
v16 = *(_QWORD *)(a1 + 16);
if( v16 )
v17 = *(_QWORD *)(*(_QWORD *)(v16 + 312) + 40i64);
else
v17 = 0i64;
if( *(_WORD *)(v17 + 56) )
{
if( v16 )
v18 = *(_QWORD *)(*(_QWORD *)(v16 + 312) + 40i64);
else
v18 = 0i64;
IoAddTriageDumpDataBlock((PVOID)(v18 + 56), 2ui64);
v19 = *(_QWORD *)(a1 + 16);
if( v19 )
v20 = *(_QWORD *)(*(_QWORD *)(v19 + 312) + 40i64);
else
v20 = 0i64;
if( v19 )
v21 = *(_QWORD *)(*(_QWORD *)(v19 + 312) + 40i64);
else
v21 = 0i64;
IoAddTriageDumpDataBlock(*(PVOID *)(v21 + 64), *(unsigned __int16 *)(v20 + 56));
v16 = *(_QWORD *)(a1 + 16);
}
if( v16 )
v22 = *(_QWORD *)(*(_QWORD *)(v16 + 312) + 40i64);
else
v22 = 0i64;
v5 = v16;
if( *(_QWORD *)(v22 + 16) )
{
v23 = v16 ? *(_QWORD *)(*(_QWORD *)(v16 + 312) + 40i64) : 0i64;
if( *(_WORD *)(*(_QWORD *)(v23 + 16) + 56i64) )
{
if( v16 )
v24 = *(_QWORD *)(*(_QWORD *)(v16 + 312) + 40i64);
else
v24 = 0i64;
IoAddTriageDumpDataBlock((PVOID)(*(_QWORD *)(v24 + 16) + 56i64), 2ui64);
v25 = *(_QWORD *)(a1 + 16);
if( v25 )
v26 = *(_QWORD *)(*(_QWORD *)(v25 + 312) + 40i64);
else
v26 = 0i64;
if( v25 )
v27 = *(_QWORD *)(*(_QWORD *)(v25 + 312) + 40i64);
else
v27 = 0i64;
IoAddTriageDumpDataBlock(
*(PVOID *)(*(_QWORD *)(v27 + 16) + 64i64),
*(unsigned __int16 *)(*(_QWORD *)(v26 + 16) + 56i64));
v5 = *(_QWORD *)(a1 + 16);
}
}
}
}
KeBugCheckEx(0xCAu, 2ui64, v5, 0i64, 0i64);
}
}
return(unsigned int)-1073741811;
}Referenced by:
No references.