AslStringAnsiToUnicode
INT64 __stdcall AslStringAnsiToUnicode(WCHAR **UnicodeBuffer, INT8 *AnsiBuffer){
INT8 v2;
unsigned int v4;
VOID *v5;
INT64 v6;
unsigned __int16 v7;
unsigned int v8;
wchar_t *Buffer;
NTSTATUS v10;
UNICODE_STRING v12;
struct _STRING DestinationString;
DestinationString = 0i64;
RtlInitAnsiString(&DestinationString, AnsiBuffer, v2);
v4 = RtlxAnsiStringToUnicodeSize(&DestinationString);
v7 = v4;
*UnicodeBuffer = 0i64;
v12 = 0i64;
if( v4 > 0xFFFF )
{
v8 = -1073741811;
AslLogCallPrintf(1ui64, "AslStringAnsiToUnicode", 0x184ui64, "Ansi string is too long to convert at %d", v4);
LABEL_3:
Buffer = v12.Buffer;
goto LABEL_9;
}
v12.Buffer = (wchar_t *)AslAlloc(v5, v4, v6);
if( !v12.Buffer )
{
v8 = -1073741801;
AslLogCallPrintf(1ui64, "AslStringAnsiToUnicode", 0x18Bui64, "Out of memory");
return v8;
}
v12.MaximumLength = v7;
v12.Length = 0;
v10 = RtlAnsiStringToUnicodeString(&v12, &DestinationString, 0);
v8 = v10;
if( v10 < 0 )
{
AslLogCallPrintf(1ui64, "AslStringAnsiToUnicode", 0x194ui64, "RtlAnsiStringToUnicodeString failed [%x]", v10);
goto LABEL_3;
}
Buffer = 0i64;
*UnicodeBuffer = v12.Buffer;
v8 = 0;
LABEL_9:
if( Buffer )
ExFreePoolWithTag(Buffer, 0x74705041u);
return v8;
}Referenced by:
AslpFileGet16BitDescription
AslpFileGet16BitModuleName
AslpFileGetClrVersionAttribute
AslpFileGetExportName