KdpWriteBreakPointEx

INT64 __fastcall KdpWriteBreakPointEx(_DWORD *a1, UINT16 *a2){
  __int64 v2; 
  __int64 v5; 
  __int64 v6; 
  unsigned int v7; 
  char *v8; 
  UINT64 v9; 
  char *v10; 
  VOID *v11; 
  int v12; 
  UINT64 Flags; 
  UINT64 Flagsa; 
  UINT64 ActualSize; 
  __int64 v17[3]; 
  char Buffer[8]; 
  char v19[504]; 
  LODWORD(ActualSize) = 0;
  v2 = (unsigned int)a1[4];
  v17[0] = 56i64;
  v17[1] = (__int64)a1;
  if( (unsigned int)v2 > 0x20 || (v5 = 16i64 * (unsigned int)v2, v6 = (unsigned int)v2, *a2 != v5) )
  {
    a1[2] = -1073741823;
    goto LABEL_19;
  }
  LODWORD(Flags) = 4;
  v7 = 16 * v2;
  KdpCopyMemoryChunks(*((_QWORD *)a2 + 1), Buffer, (unsigned int)(16 * v2), 0i64, Flags, &ActualSize);
  if( (unsigned int)ActualSize != v5 )
  {
    a1[2] = -1073741823;
LABEL_19:
    KdSendPacket(2i64, v17, a2, &KdpContext);
    return(unsigned int)a1[2];
  }
  a1[2] = 0;
  if( (_DWORD)v2 )
  {
    v8 = v19;
    do
    {
      v9 = *(unsigned int *)v8;
      if( (_DWORD)v9 )
      {
        if( !KdpDeleteBreakpoint(v9) )
          a1[2] = -1073741823;
        *(_DWORD *)v8 = 0;
      }
      v8 += 16;
      --v2;
    }
    while( v2 );
    v10 = v19;
    do
    {
      v11 = (VOID *)*((_QWORD *)v10 - 1);
      if( v11 )
      {
        v12 = KdpAddBreakpoint(v11, 0xCCui64, 1u, 0);
        *(_DWORD *)v10 = v12;
        if( !v12 )
          a1[2] = -1073741823;
      }
      v10 += 16;
      --v6;
    }
    while( v6 );
  }
  LODWORD(Flagsa) = 5;
  KdpCopyMemoryChunks(*((_QWORD *)a2 + 1), Buffer, v7, 0i64, Flagsa, &ActualSize);
  KdSendPacket(2i64, v17, a2, &KdpContext);
  return(unsigned int)a1[5];
}

Referenced by:

KdpSendWaitContinue