KdpSetContextEx

INT64 __fastcall KdpSetContextEx(INT64 a1, INT64 a2, CONTEXT *a3){
  __int64 v4; 
  unsigned __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  _QWORD v13[5]; 
  UINT64 ContextFlags; 
  LODWORD(ContextFlags) = 0;
  v13[0] = 56i64;
  v13[1] = a1;
  v4 = *(unsigned __int16 *)(a1 + 6);
  if( (unsigned __int16)v4 < 0x500u && *(&KiProcessorBlock + v4) && KdpContextSent )
  {
    v6 = *(unsigned int *)(a1 + 24);
    if( (unsigned int)v6 <= 0x1000
      && (v7 = *(unsigned int *)(a1 + 16), (unsigned int)v7 < (unsigned int)v6)
      && (v8 = *(unsigned int *)(a1 + 20), (_DWORD)v8)
      && v7 + v8 <= v6 )
    {
      KdpQuickMoveMemory((CHAR *)Context + (unsigned int)v7, *(CHAR **)(a2 + 8), (unsigned int)v8);
      if( v10 == v9 )
      {
        v11 = *(unsigned __int16 *)(a1 + 6);
        if( (_WORD)v11 != (unsigned __int16)*((_DWORD *)KeGetPcr() + 105) )
          a3 = (CONTEXT *)*((_QWORD *)*(&KiProcessorBlock + v11) + 4280);
        KdpSanitizeContextFlags((_CONTEXT *)Context, (unsigned int)v9, &ContextFlags);
        KdpCopyContext(a3, (unsigned int)ContextFlags, (_CONTEXT *)Context);
      }
      *(_DWORD *)(a1 + 8) = 0;
      *(_DWORD *)(a1 + 24) = v8;
    }
    else
    {
      *(_DWORD *)(a1 + 8) = -1073741811;
    }
  }
  else
  {
    *(_DWORD *)(a1 + 8) = -1073741823;
  }
  return KdSendPacket(2i64, v13, 0i64, &KdpContext);
}

Referenced by:

KdpSendWaitContinue