CmpSearchForOpenSubKeys

__int64 __fastcall CmpSearchForOpenSubKeys(_QWORD *a1, int a2, __int64 a3){
  char v3; 
  int v5; 
  __int64(__fastcall *v6)(__int64, __int64); 
  _QWORD *v8; 
  __int64 Count[4]; 

  v3 = 0;
  v8 = a1;
  Count[0] = 0i64;
  Count[1] = a3;
  if( a2 )
  {
    v5 = a2 - 1;
    if( v5 )
    {
      if( v5 != 1 )
        __fastfail(5u);
      v6 = (__int64(__fastcall *)(__int64, __int64))CmpSearchAndTagNoDelayCloseWorker;
    }
    else
    {
      v6 = CmpSearchAndRehashWorker;
    }
  }
  else
  {
    v3 = 1;
    v6 = (__int64(__fastcall *)(__int64, __int64))CmpSearchAndCountWorker;
    CmpDumpKeyBodyList((_CM_KEY_CONTROL_BLOCK *)a1, (UINT64 *)Count, (VOID *)a3);
  }
  CmpEnumerateAllOpenSubKeys((__int64)a1, v3, v6, (__int64)&v8);
  return LODWORD(Count[0]);
}

Referenced by:

CmRenameKey
CmpCommitRenameKeyUoW
CmpFreezeHive
CmpLightWeightCommitRenameKeyUoW
NtQueryOpenSubKeys
NtQueryOpenSubKeysEx