RtlOemStringToCountedUnicodeString

INT64 __fastcall RtlOemStringToCountedUnicodeString(
        _UNICODE_STRING *DestinationString,
        const _STRING *SourceString,
        UINT8 AllocateDestinationString){
  INT64 result; 
  wchar_t *StringRoutine; 
  ULONG v8; 
  int v9; 
  UINT64 BytesInOemString; 
  UINT64 BytesInUnicodeString; 
  result = (unsigned int)RtlxOemStringToUnicodeSize(SourceString) - 2;
  if( !(_DWORD)result )
  {
    *(_DWORD *)&DestinationString->Length = 0;
    DestinationString->Buffer = 0i64;
    return result;
  }
  if( (unsigned int)result > 0xFFFE )
    return 3221225712i64;
  DestinationString->Length = result;
  if( AllocateDestinationString )
  {
    DestinationString->MaximumLength = result;
    StringRoutine = (wchar_t *)ExpAllocateStringRoutine((unsigned int)result);
    DestinationString->Buffer = StringRoutine;
    if( !StringRoutine )
      return 3221225495i64;
  }
  else if( (unsigned __int16)result > DestinationString->MaximumLength )
  {
    return 2147483653i64;
  }
  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(unsigned int)v9;
}

Referenced by:

No references.