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.