AslStringDuplicate
INT64 __stdcall AslStringDuplicate(WCHAR **Duplicate, WCHAR *Source){
NTSTATUS v4;
unsigned int v5;
UINT64 v6;
NTSTATUS v7;
VOID *v8;
INT64 v9;
WCHAR *v10;
WCHAR *v11;
NTSTATUS v12;
UINT64 v14;
int v15;
SIZE_T v16;
ULONGLONG pullResult;
v16 = 0i64;
pullResult = 0i64;
*Duplicate = 0i64;
if( !Source )
return 0;
v4 = RtlStringCchLengthW(Source, 0x7FFFFFFFui64, &v16);
v5 = v4;
if( v4 < 0 )
{
AslLogCallPrintf(1ui64, "AslStringDuplicate", 0x235ui64, "RtlStringCchLengthW failed [%x]", v4);
return v5;
}
v6 = v16 + 1;
if( v16 + 1 < v16 )
{
v5 = -1073741675;
v14 = 576i64;
v15 = -1073741675;
goto LABEL_17;
}
v7 = RtlULongLongMult(v16 + 1, 2ui64, &pullResult);
v5 = v7;
if( v7 < 0 )
{
v15 = v7;
v14 = 582i64;
LABEL_17:
AslLogCallPrintf(1ui64, "AslStringDuplicate", v14, "SIZE_T arithmetic failed [%x]", v15);
return v5;
}
v10 = (WCHAR *)AslAlloc(v8, pullResult, v9);
v11 = v10;
if( v10 )
{
v12 = RtlStringCchCopyW(v10, v6, Source);
v5 = v12;
if( v12 < 0 )
{
AslLogCallPrintf(1ui64, "AslStringDuplicate", 0x257ui64, "RtlStringCchCopyW failed [%x]", v12);
}
else
{
*Duplicate = v11;
v11 = 0i64;
v5 = 0;
}
if( v11 )
ExFreePoolWithTag(v11, 0x74705041u);
}
else
{
v5 = -1073741801;
AslLogCallPrintf(1ui64, "AslStringDuplicate", 0x24Dui64, "Out of memory");
}
return v5;
}Referenced by:
AslFileMappingCreate
AslFileMappingCreateFromImageView
AslRegWildcardFindFirst
AslpFileMakeStringVersionAttributes
AslpFileVerQueryBlock
SdbpCheckMatchingRegistryValue