KdpSearchPhysicalPage

UINT64 __stdcall KdpSearchPhysicalPage(
        UINT64 PageFrameIndex,
        UINT64 RangeStart,
        UINT64 RangeEnd,
        UINT64 Flags,
        UINT64 MmFlags){
  UINT64 v5; 
  unsigned int v6; 
  char v7; 
  unsigned int v9; 
  int v10; 
  unsigned int v11; 
  unsigned int v13; 
  UINT64 v14; 
  __int64 v15; 
  int v16; 
  int v17; 
  UINT64 Flagsa; 
  unsigned __int64 Buffer; 
  __int64 v20[8]; 
  char v24; 
  v24 = Flags;
  v5 = PageFrameIndex << 12;
  v6 = 0;
  v7 = Flags;
  if( KdpSearchPfnValue )
  {
    Buffer = 0i64;
    v9 = 0;
    while( 1 )
    {
      LODWORD(Flagsa) = MmFlags | 2;
      if( (int)MmDbgCopyMemory(v5 + v9, &Buffer, 8ui64, 8ui64, Flagsa) >= 0
        && ((Buffer >> 12) & 0xFFFFFFFFFi64) == RangeStart )
      {
        if( (unsigned int)KdpSearchPageHitIndex < 0x1000 )
        {
          KdpSearchPageHits[KdpSearchPageHitIndex] = PageFrameIndex;
          KdpSearchPageHitOffsets[KdpSearchPageHitIndex++] = v9;
        }
        if( (v7 & 1) == 0 )
          break;
      }
      v9 += 8;
      if( v9 >= 0x1000 )
        return v6;
    }
  }
  else
  {
    v10 = KdpSearchInProgress & 2;
    v20[0] = 0i64;
    if( (KdpSearchInProgress & 0x3C) != 0 )
    {
      v11 = ((unsigned int)KdpSearchInProgress >> 2) & 0xF;
      if( v11 > 8 )
        return 0i64;
    }
    else
    {
      v11 = 8;
    }
    v13 = 0;
    while( 1 )
    {
      LODWORD(Flagsa) = MmFlags | 2;
      if( (int)MmDbgCopyMemory(v5 + v13, v20, v11, 0i64, Flagsa) >= 0 )
      {
        if( v20[0] >= RangeStart && v20[0] <= RangeEnd )
          goto LABEL_26;
        if( !v10 )
        {
          v14 = RangeStart ^ v20[0];
          v15 = 64i64;
          v16 = 0;
          do
          {
            v17 = v16 + 1;
            if( (v14 & 1) == 0 )
              v17 = v16;
            v14 >>= 1;
            v16 = v17;
            --v15;
          }
          while( v15 );
          if( v17 == 1 )
          {
LABEL_26:
            if( (unsigned int)KdpSearchPageHitIndex < 0x1000 )
            {
              KdpSearchPageHits[KdpSearchPageHitIndex] = PageFrameIndex;
              KdpSearchPageHitOffsets[KdpSearchPageHitIndex++] = v13;
            }
            if( (v24 & 1) == 0 )
              break;
          }
        }
      }
      v13 += v11;
      if( v13 >= 0x1000 )
        return v6;
    }
  }
  return 1;
}

Referenced by:

KdpSearchPhysicalPageRange