VrpAllocateDiffHiveEntry
_VRP_DIFF_HIVE_HASH_ENTRY *__stdcall VrpAllocateDiffHiveEntry(
_UNICODE_STRING *MountPoint,
_UNICODE_STRING *HiveFilePath){
unsigned __int64 v4;
VOID **PoolWithTag;
VOID **v6;
__int64 v7;
wchar_t *Buffer;
wchar_t *v9;
size_t Length;
size_t v11;
unsigned __int16 v13;
v4 = HiveFilePath->Length + (unsigned __int64)MountPoint->Length;
PoolWithTag = ExAllocatePoolWithTag(1ui64, v4 + 68, 1734693462i64);
v6 = PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, v4 + 68);
v7 = 314159i64;
Buffer = MountPoint->Buffer;
v9 = &Buffer[(unsigned __int64)MountPoint->Length >> 1];
while( Buffer < v9 )
{
v13 = (unsigned __int16)RtlUpcaseUnicodeChar(*Buffer++);
v7 = HIBYTE(v13) + 37 * ((unsigned __int8)v13 + 37 * v7);
}
v6[3] = 0i64;
v6[1] = (VOID *)v7;
v6[2] = (VOID *)1;
KeInitializeWaitChain(v6 + 6);
Length = MountPoint->Length;
*((_WORD *)v6 + 32) = Length;
memmove((char *)v6 + 68, MountPoint->Buffer, Length);
v11 = HiveFilePath->Length;
*((_WORD *)v6 + 33) = v11;
memmove((char *)v6 + 2 * ((unsigned __int64)*((unsigned __int16 *)v6 + 32) >> 1) + 68, HiveFilePath->Buffer, v11);
}
return(_VRP_DIFF_HIVE_HASH_ENTRY *)v6;
}Referenced by:
VrpFindOrCreateDiffHiveEntryForMountPoint