KdpSetContextEx

VOID __stdcall KdpSetContextEx(_DBGKD_MANIPULATE_STATE64 *m, _STRING *AdditionalData, _CONTEXT *Context){
  __int64 Processor; 
  unsigned __int64 TransferCount; 
  __int64 Unused; 
  __int64 TraceFlag; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  _QWORD v12[5]; 
  UINT64 ContextFlags; 

  LODWORD(ContextFlags) = 0;
  v12[0] = 56i64;
  v12[1] = m;
  Processor = m->Processor;
  if( (unsigned __int16)Processor < 0x500u && *(&KiProcessorBlock + Processor) && *(&KiSwapEvent + 480) )
  {
    TransferCount = m->u.ReadMemory.TransferCount;
    if( (unsigned int)TransferCount <= 0x1000
      && (Unused = m->u.GetContext.Unused, (unsigned int)Unused < (unsigned int)TransferCount)
      && (TraceFlag = m->u.Continue2.ControlSet.TraceFlag, (_DWORD)TraceFlag)
      && Unused + TraceFlag <= TransferCount )
    {
      KdpQuickMoveMemory(
        (INT8 *)&stru_140CF6298 + (unsigned int)Unused,
        AdditionalData->Buffer,
        (unsigned int)TraceFlag);
      if( v10 == v9 )
      {
        v11 = m->Processor;
        if( (_WORD)v11 != (unsigned __int16)KeGetPcr()->Prcb.Number )
          Context = (*(&KiProcessorBlock + v11))->Context;
        KdpSanitizeContextFlags(&stru_140CF6298, (unsigned int)v9, &ContextFlags);
        KdpCopyContext(Context, (unsigned int)ContextFlags, &stru_140CF6298);
      }
      m->ReturnStatus = 0;
      m->u.ReadMemory.TransferCount = TraceFlag;
    }
    else
    {
      m->ReturnStatus = -1073741811;
    }
  }
  else
  {
    m->ReturnStatus = -1073741823;
  }
  KdSendPacket(2i64, v12, 0i64, &KdpContext);
}

Referenced by:

KdpSendWaitContinue