RtlOemStringToCountedUnicodeString
NTSTATUS __stdcall RtlOemStringToCountedUnicodeString(
_UNICODE_STRING *DestinationString,
const _STRING *SourceString,
UINT8 AllocateDestinationString){
NTSTATUS result;
wchar_t *StringRoutine;
UINT32 v8;
int v9;
UINT64 BytesInOemString;
UINT64 BytesInUnicodeString;
result = RtlxOemStringToUnicodeSize(&SourceString->Length) - 2;
if( !result )
{
*(_DWORD *)&DestinationString->Length = 0;
DestinationString->Buffer = 0i64;
return result;
}
if( (unsigned int)result > 0xFFFE )
return -1073741584;
DestinationString->Length = result;
if( AllocateDestinationString )
{
DestinationString->MaximumLength = result;
StringRoutine = (wchar_t *)ExpAllocateStringRoutine((unsigned int)result);
DestinationString->Buffer = StringRoutine;
if( !StringRoutine )
return -1073741801;
}
else if( (unsigned __int16)result > DestinationString->MaximumLength )
{
return -2147483643;
}
LODWORD(BytesInOemString) = SourceString->Length;
v9 = RtlOemToUnicodeN(
DestinationString->Buffer,
DestinationString->Length,
&BytesInUnicodeString,
SourceString->Buffer,
BytesInOemString);
if( v9 >= 0 )
v9 = 0;
if( v9 < 0 )
{
if( AllocateDestinationString )
{
ExFreePoolWithTag(DestinationString->Buffer, v8);
DestinationString->Buffer = 0i64;
}
}
return v9;
}Referenced by:
No references.