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