CmpFindSecurityCellCacheIndex

char __fastcall CmpFindSecurityCellCacheIndex(__int64 a1, unsigned int a2, _DWORD *a3){
  UINT64 v3; 
  char result; 
  __int64 v8; 
  UINT64 *v9; 
  UINT64 *LowerBoundInSortedArray; 
  unsigned __int64 v11; 
  UINT64 v12; 
  LODWORD(v12) = a2;
  v3 = *(unsigned int *)(a1 + 1864);
  if( (_DWORD)v3 )
  {
    v8 = *(int *)(a1 + 1872);
    if( (int)v8 >= 0 && (unsigned int)v8 < (unsigned int)v3 && *(_DWORD *)(*(_QWORD *)(a1 + 1880) + 16 * v8) == a2 )
    {
      *a3 = v8;
      return 1;
    }
    else
    {
      v9 = *(UINT64 **)(a1 + 1880);
      LowerBoundInSortedArray = CmpFindLowerBoundInSortedArray(&v12, v9, v3);
      v11 = (unsigned __int64)((char *)LowerBoundInSortedArray - (char *)v9) >> 4;
      if( (unsigned int)v11 < (unsigned int)v3 && *(_DWORD *)LowerBoundInSortedArray == a2 )
      {
        *(_DWORD *)(a1 + 1872) = v11;
        result = 1;
        *a3 = v11;
      }
      else
      {
        *a3 = v11;
        return 0;
      }
    }
  }
  else
  {
    *a3 = 0;
    return 0;
  }
  return result;
}

Referenced by:

CmpAddSecurityCellToCache
CmpAssignSecurityToKcb
CmpCheckKey
CmpCopyKeyPartial
CmpCreateKeyControlBlock
CmpRemoveFromSecurityCache
CmpSetSecurityDescriptorInfo
CmpSyncKeyValues
CmpValidateHiveSecurityDescriptors