AslStringUpcaseToMultiByteN
NTSTATUS __stdcall AslStringUpcaseToMultiByteN(PSTR DestinationAnsiBuffer, PWCHAR Source){
const WCHAR *v2;
unsigned __int16 MaximumLength;
VOID *v5;
INT64 v6;
NTSTATUS v7;
NTSTATUS v8;
const CHAR *v10;
UINT64 v11;
UNICODE_STRING SourceString;
STRING v13;
struct _UNICODE_STRING DestinationString;
*(_DWORD *)(&v13.MaximumLength + 1) = 0;
DestinationString = 0i64;
*(_QWORD *)&SourceString.Length = 0i64;
RtlInitUnicodeString(&DestinationString, v2, (WCHAR)v2);
MaximumLength = DestinationString.MaximumLength;
SourceString.Buffer = (wchar_t *)AslAlloc(v5, DestinationString.MaximumLength, v6);
if( !SourceString.Buffer )
{
v8 = -1073741801;
AslLogCallPrintf(1ui64, "AslStringUpcaseToMultiByteN", 0x414ui64, "Out of memory");
return v8;
}
SourceString.MaximumLength = MaximumLength;
SourceString.Length = 0;
v7 = RtlUpcaseUnicodeString(&SourceString, &DestinationString, 0);
v8 = v7;
if( v7 < 0 )
{
v10 = "RtlUpcaseUnicodeString failed [%x]";
v11 = 1053i64;
}
else
{
v13.Buffer = DestinationAnsiBuffer;
*(_DWORD *)&v13.Length = 0x1000000;
v7 = RtlUnicodeStringToAnsiString(&v13, &SourceString, 0);
v8 = v7;
if( v7 >= 0 )
{
v8 = 0;
DestinationAnsiBuffer[v13.Length] = 0;
goto LABEL_5;
}
v10 = "RtlUnicodeStringToAnsiString failed [%x]";
v11 = 1068i64;
}
AslLogCallPrintf(1ui64, "AslStringUpcaseToMultiByteN", v11, v10, v7);
LABEL_5:
if( SourceString.Buffer )
ExFreePoolWithTag(SourceString.Buffer, 0x74705041u);
return v8;
}Referenced by:
SdbpFindFirstIndexedWildCardTag
SdbpFindNextIndexedWildCardTag