CmpEnumerateKcbCacheBucket

__int64 __fastcall CmpEnumerateKcbCacheBucket(
        __int64 a1,
        __int64 a2,
        __int64 (__fastcall *a3)(__int64, __int64),
        __int64 a4){
  __int64 v4; 
  __int64 result; 
  __int64 v9; 
  unsigned int v10; 
  unsigned int v11; 
  unsigned int v12; 
  __int64 v13; 
  __int64 v14; 
  v4 = *(_QWORD *)(a2 + 16);
  while( v4 )
  {
    v9 = v4 - 16;
    v10 = *(_DWORD *)(v4 - 16 + 8);
    v4 = *(_QWORD *)(v4 + 8);
    v11 = (v10 >> 21) & 0x3FF;
    v12 = (*(_DWORD *)(a1 + 8) >> 21) & 0x3FF;
    if( v12 < v11 )
    {
      v13 = v9;
      v14 = v11 - v12;
      do
      {
        v13 = *(_QWORD *)(v13 + 72);
        --v14;
      }
      while( v14 );
      if( v13 == a1 )
      {
        result = a3(v9, a4);
        if( (_DWORD)result )
          return result;
      }
    }
  }
  return 0i64;
}

Referenced by:

CmpEnumerateAllOpenSubKeys