CmpVEAddHiveToSIDMappingTable
INT64 __stdcall CmpVEAddHiveToSIDMappingTable(_CMHIVE *CmHive, INT64 a2){
unsigned __int16 *v4;
unsigned __int64 v5;
_WORD *v6;
unsigned __int16 MaximumLength;
unsigned __int16 Length;
INT64 result;
_UNICODE_STRING DestinationString;
DestinationString = 0i64;
RtlInitUnicodeString(&DestinationString, 0i64);
v4 = *(unsigned __int16 **)(a2 + 16);
v5 = *((_QWORD *)v4 + 1);
v6 = (_WORD *)(v5 + 2 * (((unsigned __int64)*v4 - 2) >> 1));
if( *v6 != 92 )
{
MaximumLength = DestinationString.MaximumLength;
Length = DestinationString.Length;
do
{
--v6;
Length += 2;
MaximumLength += 2;
}
while( (unsigned __int64)v6 >= v5 && *v6 != 92 );
DestinationString.MaximumLength = MaximumLength;
DestinationString.Length = Length;
}
DestinationString.Buffer = v6 + 1;
result = CmpAddStringToMapping(&DestinationString, CmHive);
if( (int)result >= 0 )
{
CmHive->Flags |= 2u;
return 0i64;
}
return result;
}Referenced by:
CmpLoadKeyCommon