KdpSetOwedBreakpoints
VOID __stdcall KdpSetOwedBreakpoints(VOID *CurrentPage){
_EPROCESS **v1;
unsigned __int64 v2;
_EPROCESS *Process;
unsigned __int64 v4;
unsigned __int64 v5;
unsigned __int64 v6;
unsigned __int64 v7;
UINT8 v8;
unsigned __int8 *v9;
unsigned __int64 v10;
__int64 v11;
int inserted;
UINT64 Buffer;
Buffer = 0i64;
if( KdpOweBreakpoint )
{
v1 = (_EPROCESS **)&unk_140C33F88;
v2 = (unsigned __int64)CurrentPage & 0xFFFFFFFFFFFFF000ui64;
Process = KeGetCurrentThread()->ApcState.Process;
while( 1 )
{
if( ((_DWORD)v1[3] & 0xA) != 0 )
{
v4 = (unsigned __int64)*(v1 - 1);
if( v4 >= 0xFFFF800000000000ui64 || *v1 == Process )
{
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 = (unsigned __int8 *)&unk_140C33FA5;
do
{
if( (*(_DWORD *)(v9 - 5) & 0xA) != 0 )
{
v10 = *(_QWORD *)(v9 - 37);
if( v10 >= 0xFFFF800000000000ui64 || *(_EPROCESS **)(v9 - 29) == Process )
{
if( KdpCopyCodeStream(v10 & ~(unsigned __int64)*v9, &Buffer, (VOID *)*(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