RtlUpcaseUnicodeStringToAnsiString
NTSTATUS __stdcall RtlUpcaseUnicodeStringToAnsiString(
_STRING *DestinationString,
const _UNICODE_STRING *SourceString,
UINT8 AllocateDestinationString){
unsigned int v6;
char *StringRoutine;
UINT32 v9;
int v10;
UINT64 BytesInUnicodeString;
UINT64 BytesInMultiByteString;
LODWORD(BytesInMultiByteString) = 0;
v6 = RtlxUnicodeStringToAnsiSize((_UNICODE_STRING *)SourceString);
if( v6 > 0xFFFF )
return -1073741584;
DestinationString->Length = v6 - 1;
if( AllocateDestinationString )
{
DestinationString->MaximumLength = v6;
StringRoutine = (char *)ExpAllocateStringRoutine(v6);
DestinationString->Buffer = StringRoutine;
if( !StringRoutine )
return -1073741801;
}
else if( (unsigned __int16)(v6 - 1) >= DestinationString->MaximumLength )
{
return -2147483643;
}
LODWORD(BytesInUnicodeString) = SourceString->Length;
v10 = RtlUpcaseUnicodeToMultiByteN(
DestinationString->Buffer,
DestinationString->Length,
(PULONG)&BytesInMultiByteString,
SourceString->Buffer,
BytesInUnicodeString);
if( v10 >= 0 )
{
DestinationString->Buffer[(unsigned int)BytesInMultiByteString] = 0;
v10 = 0;
}
if( v10 < 0 )
{
if( AllocateDestinationString )
{
ExFreePoolWithTag(DestinationString->Buffer, v9);
DestinationString->Buffer = 0i64;
}
}
return v10;
}Referenced by:
No references.