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