RtlUpcaseUnicodeStringToAnsiString

INT64 __fastcall RtlUpcaseUnicodeStringToAnsiString(
        _STRING *DestinationString,
        const _UNICODE_STRING *SourceString,
        UINT8 AllocateDestinationString){
  unsigned int v6; 
  char *StringRoutine; 
  ULONG v9; 
  NTSTATUS v10; 
  UINT64 BytesInUnicodeString; 
  UINT64 BytesInMultiByteString; 
  LODWORD(BytesInMultiByteString) = 0;
  v6 = RtlxUnicodeStringToAnsiSize((UNICODE_STRING *)SourceString);
  if( v6 > 0xFFFF )
    return 3221225712i64;
  DestinationString->Length = v6 - 1;
  if( AllocateDestinationString )
  {
    DestinationString->MaximumLength = v6;
    StringRoutine = (char *)ExpAllocateStringRoutine(v6);
    DestinationString->Buffer = StringRoutine;
    if( !StringRoutine )
      return 3221225495i64;
  }
  else if( (unsigned __int16)(v6 - 1) >= DestinationString->MaximumLength )
  {
    return 2147483653i64;
  }
  LODWORD(BytesInUnicodeString) = SourceString->Length;
  v10 = RtlUpcaseUnicodeToMultiByteN(
          DestinationString->Buffer,
          DestinationString->Length,
          &BytesInMultiByteString,
          SourceString->Buffer,
          BytesInUnicodeString);
  if( v10 >= 0 )
  {
    DestinationString->Buffer[(unsigned int)BytesInMultiByteString] = 0;
    v10 = 0;
  }
  if( v10 < 0 )
  {
    if( AllocateDestinationString )
    {
      ExFreePoolWithTag(DestinationString->Buffer, v9);
      DestinationString->Buffer = 0i64;
    }
  }
  return(unsigned int)v10;
}

Referenced by:

No references.