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.