RtlUnicodeToOemN
NTSTATUS __stdcall RtlUnicodeToOemN(
PCHAR OemString,
UINT64 MaxBytesInOemString,
PULONG BytesInOemString,
WCHAR *UnicodeString,
UINT64 BytesInUnicodeString){
unsigned int v8;
NTSTATUS v9;
unsigned int v10;
unsigned int v11;
INT64 v12;
__int64 v13;
__int64 v14;
unsigned int *v16;
NTSTATUS v17;
int v18;
PCHAR v19;
__int64 v20;
__int16 v21;
unsigned int v22;
UINT64 UnicodeStringByteCount;
char v24;
v8 = MaxBytesInOemString;
v9 = 0;
if( RtlpIsUtf8Process(1) )
{
v16 = (unsigned int *)&v24;
if( BytesInOemString )
v16 = BytesInOemString;
if( (_DWORD)BytesInUnicodeString )
{
LODWORD(UnicodeStringByteCount) = BytesInUnicodeString;
v17 = RtlUnicodeToUTF8N(OemString, v8, v16, UnicodeString, UnicodeStringByteCount);
}
else
{
*v16 = 0;
v17 = 0;
}
if( v17 == -1073741789 )
return -2147483643;
return v9;
}
else
{
v10 = (unsigned int)BytesInUnicodeString >> 1;
if( (_BYTE)NlsMbOemCodePageTag )
{
v18 = (int)OemString;
if( v10 )
{
v19 = OemString;
do
{
if( !v8 )
break;
v20 = *UnicodeString++;
v21 = *(_WORD *)(NlsUnicodeToMbOemData + 2 * v20);
if( HIBYTE(v21) )
{
v22 = v8--;
if( v22 < 2 )
break;
*OemString = HIBYTE(v21);
OemString = ++v19;
}
*OemString = v21;
--v8;
OemString = ++v19;
--v10;
}
while( v10 );
}
if( BytesInOemString )
*BytesInOemString = (_DWORD)OemString - v18;
}
else
{
v11 = v8;
if( v10 < v8 )
v11 = (unsigned int)BytesInUnicodeString >> 1;
if( BytesInOemString )
*BytesInOemString = v11;
v12 = NlsUnicodeToOemData;
if( v11 )
{
v13 = v11;
do
{
v14 = *UnicodeString++;
*OemString++ = *(_BYTE *)(v14 + v12);
--v13;
}
while( v13 );
}
}
return v8 < v10 ? 0x80000005 : 0;
}
}Referenced by:
RtlUnicodeStringToCountedOemString
RtlUnicodeStringToOemString