VrpBuildKeyPath
VOID __stdcall VrpBuildKeyPath(UNICODE_STRING *Part1, UNICODE_STRING *Part2, UNICODE_STRING *NewPath){
UNICODE_STRING *v3;
UINT64 v6;
wchar_t *PoolWithTag;
UNICODE_STRING *v8;
_QWORD v9[3];
v3 = (UNICODE_STRING *)v9;
v9[0] = 0i64;
v9[1] = 0i64;
if( Part1 )
v3 = Part1;
NewPath->Length = 0;
v6 = (unsigned __int16)(Part2->Length + 2 + v3->MaximumLength);
NewPath->MaximumLength = v6;
PoolWithTag = (wchar_t *)ExAllocatePoolWithTag(PagedPool, v6, 0x67655256ui64);
NewPath->Buffer = PoolWithTag;
if( PoolWithTag )
{
RtlCopyUnicodeString(NewPath, v3, v8);
if( Part2->Length )
{
if( *Part2->Buffer != 92 && v3->Buffer[((unsigned __int64)v3->Length >> 1) - 1] != 92 )
RtlAppendUnicodeToString(NewPath, (PWCHAR)L"\\");
RtlAppendUnicodeStringToString(NewPath, Part2);
}
}
}Referenced by:
VrpCreateNamespaceNode
VrpPostEnumerateKey
VrpPostOpenOrCreate
VrpPreLoadKey
VrpPreOpenOrCreate
VrpTranslatePath