PopUnicodeStringDeepCopy

NTSTATUS __stdcall PopUnicodeStringDeepCopy(PUNICODE_STRING DestinationString, PCUNICODE_STRING SourceString){
  PVOID *p_Buffer; 
  unsigned int v3; 
  VOID *PoolWithTag; 
  NTSTATUS result; 
  p_Buffer = (PVOID *)&DestinationString->Buffer;
  v3 = SourceString->Length + 2;
  if( v3 > 0xFFFF )
  {
    if( *p_Buffer )
      goto LABEL_7;
    v3 = 0xFFFF;
  }
  if( !*p_Buffer || DestinationString->MaximumLength < v3 )
  {
    PoolWithTag = ExAllocatePoolWithTag(PagedPool, v3, 0x54515750ui64);
    if( PoolWithTag )
    {
      if( *p_Buffer )
        ExFreePoolWithTag(*p_Buffer, 0);
      *p_Buffer = PoolWithTag;
      DestinationString->Length = 0;
      DestinationString->MaximumLength = v3;
    }
  }
LABEL_7:
  result = RtlUnicodeStringCopy(DestinationString, (UNICODE_STRING *)SourceString);
  if( result >= 0 )
    *((_WORD *)*p_Buffer + ((unsigned __int64)DestinationString->Length >> 1)) = 0;
  return result;
}

Referenced by:

PopAvlFindOrMakeStatsForPowerRequest
PopAvlFindOrMakeStatsForScenarioType
PopAvlGetPowerRequestKey