KdpReportCommandStringStateChange

VOID __stdcall KdpReportCommandStringStateChange(_STRING *Name, _STRING *Command, _FILETIME *ContextRecord){
  unsigned int Length; 
  UINT64 v7; 
  UINT64 v8; 
  unsigned int v9; 
  UINT64 v10; 
  UINT64 Flags; 
  UINT64 Flagsa; 
  UINT64 ActualSize; 
  _STRING OutMessageData; 
  _STRING OutMessageHeader; 
  _DBGKD_ANY_WAIT_STATE_CHANGE WaitStateChange; 

  OutMessageData = 0i64;
  OutMessageHeader = 0i64;
  memset(&WaitStateChange, 0i64, sizeof(WaitStateChange));
  LODWORD(ActualSize) = 0;
  do
  {
    KdpSetCommonState(0x3032ui64, (_CONTEXT *)ContextRecord, &WaitStateChange);
    KdpSetContextState(&WaitStateChange, (_CONTEXT *)ContextRecord);
    memset(&WaitStateChange.u, 0i64, 0x40u);
    Length = Name->Length;
    v7 = 127i64;
    OutMessageData.Buffer = (char *)&KdpMessageBuffer;
    if( (unsigned __int16)Length <= 0x7Fu )
      v7 = Length;
    LODWORD(Flags) = 4;
    KdpCopyMemoryChunks((UINT64)Name->Buffer, &KdpMessageBuffer, v7, 0i64, Flags, &ActualSize);
    OutMessageData.Length = ActualSize + 1;
    OutMessageData.Buffer[(unsigned __int16)(ActualSize + 1) - 1] = 0;
    v8 = Command->Length;
    v9 = KdTransportMaxPacketSize - OutMessageData.Length - 240;
    LODWORD(Flagsa) = 4;
    if( (unsigned int)v8 >= v9 )
      v8 = v9;
    KdpCopyMemoryChunks(
      (UINT64)Command->Buffer,
      &OutMessageData.Buffer[OutMessageData.Length],
      v8,
      0i64,
      Flagsa,
      &ActualSize);
    OutMessageData.Length += ActualSize + 1;
    v10 = OutMessageData.Length;
    OutMessageData.Buffer[OutMessageData.Length - 1] = 0;
    OutMessageHeader.Buffer = (char *)&WaitStateChange;
    OutMessageHeader.Length = 240;
  }
  while( KdpSendWaitContinue(v10, &OutMessageHeader, &OutMessageData, (_CONTEXT *)ContextRecord) == 2 );
}

Referenced by:

KdpCommandString