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