CmpPostApc
void __fastcall CmpPostApc(__int64 a1, __int64 a2, __int64 a3, _DWORD *a4, __int64 a5){
_QWORD *v6;
_QWORD *v7;
_EWOW64PROCESS *WoW64Process;
bool v9;
bool v10;
__int64 v11;
_QWORD *v12;
unsigned __int16 Machine;
_QWORD *v14;
_KEVENT *v15;
__int64 v16;
_QWORD *v17;
v6 = *(_QWORD **)a5;
v7 = *(_QWORD **)(*(_QWORD *)a5 + 64i64);
if( (_QWORD *)v7[13] == v7 + 13 )
{
DbgPrint("IoStatusBlock pointing onto itself AsyncUser = %p\n", v7);
if( (_BYTE)KdDebuggerEnabled )
{
if( !(_BYTE)KdDebuggerNotPresent )
__debugbreak();
}
}
WoW64Process = KeGetCurrentThread()->ApcState.Process->WoW64Process;
v9 = 0;
if( WoW64Process )
{
Machine = WoW64Process->Machine;
if( Machine == 332 || Machine == 452 )
v9 = 1;
}
**(_DWORD **)(v6[8] + 104i64) = *a4;
v10 = !v9;
v11 = *(_QWORD *)(v6[8] + 104i64);
if( v10 )
*(_QWORD *)(v11 + 8) = 0i64;
else
*(_DWORD *)(v11 + 4) = 0;
v12 = (_QWORD *)v6[8];
if( (_QWORD *)v12[13] == v12 + 13 )
{
DbgPrint("IoStatusBlock pointing onto itself AsyncUser = %p\n", v12);
if( (_BYTE)KdDebuggerEnabled )
{
if( !(_BYTE)KdDebuggerNotPresent )
__debugbreak();
}
}
*(_QWORD *)a4 = *(_QWORD *)(v6[8] + 104i64);
v14 = (_QWORD *)v6[8];
if( (_QWORD *)v14[13] == v14 + 13 )
{
DbgPrint("IoStatusBlock pointing onto itself AsyncUser = %p\n", v14);
if( (_BYTE)KdDebuggerEnabled )
{
if( !(_BYTE)KdDebuggerNotPresent )
__debugbreak();
}
}
v15 = *(_KEVENT **)(v6[8] + 8i64);
if( v15 )
{
KeSetEvent(v15, 0, 0);
HalPutDmaAdapter(*(PADAPTER_OBJECT *)(v6[8] + 8i64));
}
v16 = v6[2];
v17 = (_QWORD *)v6[3];
if( *(_QWORD **)(v16 + 8) != v6 + 2 || (_QWORD *)*v17 != v6 + 2 )
__fastfail(3u);
*v17 = v16;
*(_QWORD *)(v16 + 8) = v17;
CmpFreeSubordinatePost((INT64)v6);
CmpFreePostBlock(v6);
}Referenced by:
No references.