KdpGetContext

VOID __fastcall KdpGetContext(_DBGKD_MANIPULATE_STATE64 *m, _STRING *AdditionalData, _CONTEXT *Context){
  __int64 v4; 
  int v7; 
  __int64 v8; 
  unsigned int ContextFlags; 
  unsigned int v10; 
  unsigned __int16 v11; 
  v4 = *((unsigned __int16 *)m + 3);
  if( (unsigned __int16)v4 >= 0x500u )
    goto LABEL_11;
  v7 = 0;
  v8 = (__int64)*(&KiProcessorBlock + v4);
  if( !v8 )
    goto LABEL_11;
  if( (_WORD)v4 != (unsigned __int16)*((_DWORD *)KeGetPcr() + 105) )
    Context = *(_CONTEXT **)(v8 + 34240);
  ContextFlags = Context->ContextFlags;
  v10 = 1256;
  if( (ContextFlags & 0x100040) == 1048640 )
    v10 = KUSER_SHARED_DATA.XState.Size + 800;
  v11 = v10 + 15;
  if( v10 + 15 <= AdditionalData->MaximumLength )
  {
    KdpInitializeExtendedContext((CONTEXT *)AdditionalData->Buffer, ContextFlags);
    KdpCopyContext((_CONTEXT *)AdditionalData->Buffer, ContextFlags, Context);
    if( (ContextFlags & 0x100040) != 1048640 )
      v11 = 1232;
    AdditionalData->Length = v11;
  }
  else
  {
LABEL_11:
    v7 = -1073741823;
  }
  *((_DWORD *)m + 2) = v7;
}

Referenced by:

KdpGetContextEx
KdpSendWaitContinue