RtlUpcaseUnicodeStringToCountedOemString
NTSTATUS __stdcall RtlUpcaseUnicodeStringToCountedOemString(
_STRING *DestinationString,
const _UNICODE_STRING *SourceString,
UINT8 AllocateDestinationString){
unsigned int v6;
UINT32 v7;
int v8;
INT64 v9;
INT64 v10;
char *StringRoutine;
UINT64 BytesInUnicodeString;
WCHAR *BytesInUnicodeStringa;
UINT64 v15;
UINT64 *v16;
UINT64 v17;
UINT64 BytesInOemString;
LODWORD(BytesInOemString) = 0;
v6 = RtlxUnicodeStringToOemSize(&SourceString->Length) - 1;
if( !v6 )
{
*(_DWORD *)&DestinationString->Length = 0;
DestinationString->Buffer = 0i64;
return 0;
}
if( v6 > 0xFFFF )
return -1073741584;
DestinationString->Length = v6;
if( AllocateDestinationString )
{
DestinationString->MaximumLength = v6;
StringRoutine = (char *)ExpAllocateStringRoutine(v6);
DestinationString->Buffer = StringRoutine;
if( !StringRoutine )
return -1073741801;
}
else if( (unsigned __int16)v6 > DestinationString->MaximumLength )
{
return -2147483643;
}
LODWORD(BytesInUnicodeString) = SourceString->Length;
v8 = RtlUpcaseUnicodeToOemN(
DestinationString->Buffer,
DestinationString->Length,
(PULONG)&BytesInOemString,
SourceString->Buffer,
BytesInUnicodeString);
LODWORD(v16) = v8;
if( v8 >= 0
&& !RtlpDidUnicodeToOemWork(
DestinationString,
(_UNICODE_STRING *)SourceString,
v9,
v10,
BytesInUnicodeStringa,
v15,
v16,
v17) )
{
v8 = -1073741470;
}
if( v8 >= 0 )
v8 = 0;
if( v8 < 0 )
{
if( AllocateDestinationString )
{
ExFreePoolWithTag(DestinationString->Buffer, v7);
DestinationString->Buffer = 0i64;
}
}
return v8;
}Referenced by:
RtlIsNameLegalDOS8Dot3