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