KdpWriteBreakPointEx
NTSTATUS __stdcall KdpWriteBreakPointEx(_DBGKD_MANIPULATE_STATE64 *m, _STRING *AdditionalData){
__int64 Unused;
__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;
Unused = m->u.GetContext.Unused;
v17[0] = 56i64;
v17[1] = (__int64)m;
if( (unsigned int)Unused > 0x20
|| (v5 = 16i64 * (unsigned int)Unused, v6 = (unsigned int)Unused, AdditionalData->Length != v5) )
{
m->ReturnStatus = -1073741823;
goto LABEL_19;
}
LODWORD(Flags) = 4;
v7 = 16 * Unused;
KdpCopyMemoryChunks((UINT64)AdditionalData->Buffer, Buffer, (unsigned int)(16 * Unused), 0i64, Flags, &ActualSize);
if( (unsigned int)ActualSize != v5 )
{
m->ReturnStatus = -1073741823;
LABEL_19:
KdSendPacket(2i64, v17, AdditionalData, &KdpContext);
return m->ReturnStatus;
}
m->ReturnStatus = 0;
if( (_DWORD)Unused )
{
v8 = v19;
do
{
v9 = *(unsigned int *)v8;
if( (_DWORD)v9 )
{
if( !KdpDeleteBreakpoint(v9) )
m->ReturnStatus = -1073741823;
*(_DWORD *)v8 = 0;
}
v8 += 16;
--Unused;
}
while( Unused );
v10 = v19;
do
{
v11 = (VOID *)*((_QWORD *)v10 - 1);
if( v11 )
{
v12 = KdpAddBreakpoint(v11, 0xCCui64, 1u, 0);
*(_DWORD *)v10 = v12;
if( !v12 )
m->ReturnStatus = -1073741823;
}
v10 += 16;
--v6;
}
while( v6 );
}
LODWORD(Flagsa) = 5;
KdpCopyMemoryChunks((UINT64)AdditionalData->Buffer, Buffer, v7, 0i64, Flagsa, &ActualSize);
KdSendPacket(2i64, v17, AdditionalData, &KdpContext);
return m->u.BreakPointEx.ContinueStatus;
}Referenced by:
KdpSendWaitContinue