KiDispatchCallout

INT64 __fastcall KiDispatchCallout(INT64 a1, INT64 a2, INT64 a3, INT64 *a4){
  INT64 v6; 
  unsigned __int8 CurrentIrql; 
  int *v8; 
  unsigned int v9; 
  __int64 v10; 
  __int64 v11; 
  unsigned __int64 v12; 
  _QWORD *v13; 
  int *v14; 
  char v15; 
  __int64 v16; 
  unsigned int v17; 
  unsigned int v18; 
  char v19; 
  __int64 v20; 
  __int64 v21; 
  INT64 result; 
  int v23[4]; 
  unsigned __int64 retaddr; 
  __int64 v25; 
  __int64 v26; 
  KeExitRetpoline();
  v6 = *a4;
  *(_QWORD *)(a1 + 72) = a1 ^ *a4 ^ retaddr;
  *(_QWORD *)(a1 + 56) = v6 ^ (unsigned __int64)&retaddr;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  retaddr = 0i64;
  v8 = v23;
  v9 = 16;
  v10 = 16i64;
  v11 = *(_QWORD *)(v6 + 32) ^ *(_QWORD *)(v6 + 64);
  v23[0] = 51251211;
  v23[1] = 201785869;
  v12 = v11 | 0xFFFF800000000000ui64;
  v23[2] = 251986182;
  v23[3] = 150995978;
  v13 = (_QWORD *)v12;
  v25 = __ROR8__(v12, v12 & 0x3F);
  v14 = v23;
  do
  {
    v15 = *(_BYTE *)v14;
    v14 = (int *)((char *)v14 + 1);
    *(_BYTE *)v8 = v15 ^ 0xB;
    v8 = (int *)((char *)v8 + 1);
    --v10;
  }
  while( v10 );
  v16 = v25;
  v17 = 25;
  v18 = 0;
  do
  {
    v19 = ~(unsigned __int8)*v13 & 0x3F;
    *v13 = v12 + (KiWaitAlways ^ _byteswap_uint64(v16 ^ __ROL8__(KiWaitNever ^ *v13, KiWaitNever))) + v18;
    v16 = (v12 + __ROL8__(__ROR8__(v18 ^ (unsigned __int64)(200 - v18), v19) ^ v16, v19)) ^ 0x7E80690F;
    v20 = v9;
    do
    {
      v21 = __ROL8__(*v13, 4);
      *v13 = *((unsigned __int8 *)v23 + (v21 & 0xF)) | v21 & 0xFFFFFFFFFFFFFFF0ui64;
      --v20;
    }
    while( v20 );
    ++v13;
    if( ++v18 == 25 )
    {
      if( *(_QWORD *)v12 != 0x85131481131482Ei64 )
      {
        *(v13 - 1) ^= *(_QWORD *)v12 ^ 0x85131481131482Ei64;
        v17 += *((_DWORD *)v13 - 1);
        *(v13 - 1) ^= *(_QWORD *)v12 ^ 0x85131481131482Ei64;
      }
      v9 = 1;
    }
  }
  while( v18 < v17 );
  v26 = *(_QWORD *)v12 ^ 0x85131481131482Ei64;
  *(_DWORD *)v12 = -1390710795;
  *(_DWORD *)v12 ^= 0xBC2A27DB;
  ((void(__fastcall *)(unsigned __int64, __int64, _QWORD, _QWORD))v12)(v12, v26, 0i64, 0i64);
  result = CurrentIrql;
  __writecr8(CurrentIrql);
  return result;
}

Referenced by:

No references.