CmpFindKcbInHashEntryByCompressedName
VOID __stdcall CmpFindKcbInHashEntryByCompressedName(
_CMHIVE *Hive,
_CM_PATH_HASH PathHash,
_CM_KEY_CONTROL_BLOCK *Parent,
PWCHAR ComponentName,
UINT16 ComponentNameLength){
__int64 i;
__int64 v9;
unsigned __int16 v10;
int v11;
UNICODE_STRING SearchName;
SearchName = 0i64;
for( i = *(_QWORD *)(*((_QWORD *)Hive + 205)
+ 24
* ((unsigned int)(*((_DWORD *)Hive + 412) - 1) & ((101027 * (PathHash.Hash ^ (PathHash.Hash >> 9))) ^ ((unsigned __int64)(101027 * (PathHash.Hash ^ (PathHash.Hash >> 9))) >> 9)))
+ 16); i; i = *(_QWORD *)(i + 8) )
{
if( *(_DWORD *)i == PathHash.Hash && *(_CM_KEY_CONTROL_BLOCK **)(i + 56) == Parent )
{
v9 = *(_QWORD *)(i + 64);
v10 = *(_WORD *)(v9 + 24);
if( (*(_DWORD *)v9 & 1) != 0 )
{
v11 = CmpCompareTwoCompressedNames(
ComponentName,
ComponentNameLength,
(WCHAR *)(v9 + 26),
*(unsigned __int16 *)(v9 + 24));
}
else
{
SearchName.Buffer = (wchar_t *)(v9 + 26);
SearchName.Length = v10;
SearchName.MaximumLength = v10;
v11 = CmpCompareCompressedName(&SearchName, ComponentName, ComponentNameLength, 1ui64);
}
if( !v11 )
break;
}
}
}Referenced by:
CmpPartialPromoteSubkeys
CmpSubtreeEnumeratorAdvance