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.