RtlUpcaseUnicodeStringToOemString

NTSTATUS __stdcall RtlUpcaseUnicodeStringToOemString(
        _STRING *DestinationString,
        _UNICODE_STRING *SourceString,
        UINT8 AllocateDestinationString){
  unsigned int v6; 
  UINT32 v7; 
  int v8; 
  INT64 v9; 
  INT64 v10; 
  char *StringRoutine; 
  UINT64 BytesInUnicodeString; 
  WCHAR *BytesInUnicodeStringa; 
  UINT64 v15; 
  UINT64 *v16; 
  UINT64 v17; 
  UINT64 BytesInOemString; 

  LODWORD(BytesInOemString) = 0;
  v6 = RtlxUnicodeStringToOemSize(&SourceString->Length);
  if( v6 > 0xFFFF )
    return -1073741584;
  DestinationString->Length = v6 - 1;
  if( AllocateDestinationString )
  {
    DestinationString->MaximumLength = v6;
    StringRoutine = (char *)ExpAllocateStringRoutine(v6);
    DestinationString->Buffer = StringRoutine;
    if( !StringRoutine )
      return -1073741801;
  }
  else if( (unsigned __int16)(v6 - 1) >= DestinationString->MaximumLength )
  {
    return -2147483643;
  }
  LODWORD(BytesInUnicodeString) = SourceString->Length;
  v8 = RtlUpcaseUnicodeToOemN(
         DestinationString->Buffer,
         DestinationString->Length,
         (PULONG)&BytesInOemString,
         SourceString->Buffer,
         BytesInUnicodeString);
  LODWORD(v16) = v8;
  if( v8 >= 0
    && !RtlpDidUnicodeToOemWork(DestinationString, SourceString, v9, v10, BytesInUnicodeStringa, v15, v16, v17) )
  {
    v8 = -1073741470;
  }
  if( v8 >= 0 )
  {
    DestinationString->Buffer[(unsigned int)BytesInOemString] = 0;
    v8 = 0;
  }
  if( v8 < 0 )
  {
    if( AllocateDestinationString )
    {
      ExFreePoolWithTag(DestinationString->Buffer, v7);
      DestinationString->Buffer = 0i64;
    }
  }
  return v8;
}

Referenced by:

No references.