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.