KdpLowRestoreBreakpoint

UINT8 __stdcall KdpLowRestoreBreakpoint(UINT64 Index){
  char *v1; 
  int v2; 
  int inserted; 
  int v5; 
  UINT64 Buffer; 

  Buffer = 0i64;
  ++*(&KiSwapEvent + 1155);
  v1 = (char *)&KdpBreakpointTable + 40 * (unsigned int)Index;
  v2 = *((_DWORD *)v1 + 8);
  if( (v2 & 8) == 0 )
  {
    if( (v2 & 0x10) == 0 && (unsigned int)KdpIsBreakpoint((__int64)v1, v1 + 24) == 1 )
      return 1;
    if( KdpCopyCodeStream(
           *(_QWORD *)v1 & ~(unsigned __int64)(unsigned __int8)v1[37],
           &Buffer,
           (VOID *)(unsigned __int8)v1[36],
           4ui64) >= 0 )
    {
      inserted = KdpInsertBreakpoint((__int64)v1, &Buffer);
      v5 = *((_DWORD *)v1 + 8);
      if( inserted )
      {
        *((_DWORD *)v1 + 8) = v5 ^ ((unsigned __int8)inserted ^ (unsigned __int8)v5) & 2;
        return 1;
      }
      *((_DWORD *)v1 + 8) = v5 | 2;
    }
    else
    {
      *((_DWORD *)v1 + 8) |= 2u;
    }
    return 0;
  }
  *((_DWORD *)v1 + 8) = v2 & 0xFFFFFFF7;
  return 1;
}

Referenced by:

KdpRestoreAllBreakpoints