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