MiDoStackCopy
VOID __stdcall MiDoStackCopy(_KDPC *Dpc, VOID *DeferredContext, VOID *SystemArgument1, VOID *SystemArgument2){
unsigned __int64 v4;
unsigned __int64 v6;
_MMPFN *v7;
bool v8;
CHAR v9;
__int16 v10;
unsigned __int64 LeafPfnBuddy;
NTSTATUS v12;
__int64 Parameter[5];
v4 = *(_QWORD *)DeferredContext;
v6 = *(_QWORD *)DeferredContext;
v7 = &MmGetPfnDb()[v6];
Parameter[1] = (__int64)SystemArgument1;
v8 = *((_QWORD *)DeferredContext + 7) != 0i64;
Parameter[2] = (__int64)SystemArgument2;
v9 = 1;
Parameter[0] = (__int64)DeferredContext;
v10 = v8 + 1;
if( v4 <= 0xFFFFFFFFFi64
&& (((unsigned __int64)MmGetPfnDb()[v6].u4._bf_0 >> 50) & 1) != 0
&& (((unsigned __int64)v7->u4._bf_0 >> 60) & 7) == 2 )
{
LeafPfnBuddy = MiGetLeafPfnBuddy(v7);
}
else
{
LeafPfnBuddy = -32i64;
}
if( LeafPfnBuddy != -32i64 && (*(_BYTE *)(&v7->u3 + 1) & 7) == 6 && v7->u3.ReferenceCount == v10 )
{
if( LeafPfnBuddy == -16i64 && *((struct _KTHREAD **)DeferredContext + 3) != KeGetCurrentThread() )
{
v12 = KeExpandKernelStackAndCalloutInternal(MiJumpStackTarget, Parameter, 0x6000ui64, v9, 0i64);
if( v12 >= 0 )
return;
*((_DWORD *)DeferredContext + 10) = v12;
}
}
else
{
*((_DWORD *)DeferredContext + 10) = -1073740748;
}
MiJumpStackTarget(Parameter);
}Referenced by:
No references.