KdpSetOwedBreakpoints
VOID __stdcall KdpSetOwedBreakpoints(PVOID CurrentPage){
__int64 *v1;
unsigned __int64 v2;
__int64 v3;
unsigned __int64 v4;
unsigned __int64 v5;
unsigned __int64 v6;
unsigned __int64 v7;
UINT8 v8;
char *v9;
unsigned __int64 v10;
INT64 v11;
int inserted;
UINT64 Buffer;
Buffer = 0i64;
if( KdpOweBreakpoint )
{
v1 = qword_140C33F88;
v2 = (unsigned __int64)CurrentPage & 0xFFFFFFFFFFFFF000ui64;
v3 = *((_QWORD *)KeGetCurrentThread() + 23);
while( 1 )
{
if( (v1[3] & 0xA) != 0 )
{
v4 = *(v1 - 1);
if( v4 >= 0xFFFF800000000000ui64 || *v1 == v3 )
{
v5 = v2 + 4096;
v6 = v4 & ~(unsigned __int64)*((unsigned __int8 *)v1 + 29);
if( v6 >= v2 && v6 < v5 )
break;
v7 = v6 + *((unsigned __int8 *)v1 + 28);
if( v7 >= v6 && v7 > v2 && v7 <= v5 )
break;
}
}
v1 += 5;
if( (__int64)v1 >= (__int64)&KdTimerStop )
return;
}
v8 = KdEnterDebugger(0i64, 0i64);
KdpOweBreakpoint = 0;
v9 = byte_140C33FA5;
do
{
if( (*(_DWORD *)(v9 - 5) & 0xA) != 0 )
{
v10 = *(_QWORD *)(v9 - 37);
if( v10 >= 0xFFFF800000000000ui64 || *(_QWORD *)(v9 - 29) == v3 )
{
if( (int)KdpCopyCodeStream(
v10 & ~(unsigned __int64)(unsigned __int8)*v9,
&Buffer,
(unsigned __int8)*(v9 - 1),
4ui64) >= 0 )
{
v11 = (INT64)(v9 - 37);
if( (*(_DWORD *)(v9 - 5) & 2) != 0 )
{
*(_QWORD *)(v9 - 13) = Buffer;
inserted = KdpInsertBreakpoint(v11, &Buffer);
if( inserted )
*(_DWORD *)(v9 - 5) = inserted;
}
else
{
KdpRemoveBreakpoint(v11, &Buffer);
}
}
}
else
{
KdpOweBreakpoint = 1;
}
}
v9 += 40;
}
while( (__int64)v9 < (__int64)KdpSearchPageHits + 5 );
KdExitDebugger(v8);
}
}Referenced by:
KdSetOwedBreakpoints