RtlUnicodeStringToAnsiString

NTSTATUS __stdcall RtlUnicodeStringToAnsiString(
        _STRING *DestinationString,
        _UNICODE_STRING *SourceString,
        UINT8 AllocateDestinationString){
  NTSTATUS v6; 
  UINT64 v7; 
  unsigned __int16 v8; 
  unsigned __int16 MaximumLength; 
  UINT32 v10; 
  int v11; 
  char *StringRoutine; 
  UINT64 BytesInUnicodeString; 
  UINT64 v15; 
  UINT8 v16; 
  UINT64 BytesInMultiByteString; 

  v16 = AllocateDestinationString;
  LODWORD(BytesInMultiByteString) = 0;
  v6 = 0;
  LODWORD(v15) = 0;
  RtlUnicodeToMultiByteSize(&v15, SourceString->Buffer, SourceString->Length);
  v7 = (unsigned int)(v15 + 1);
  if( (unsigned int)v7 > 0xFFFF )
    return -1073741584;
  v8 = v15;
  DestinationString->Length = v15;
  if( AllocateDestinationString )
  {
    DestinationString->MaximumLength = v7;
    StringRoutine = (char *)ExpAllocateStringRoutine(v7);
    DestinationString->Buffer = StringRoutine;
    if( !StringRoutine )
      return -1073741801;
  }
  else
  {
    MaximumLength = DestinationString->MaximumLength;
    if( v8 >= MaximumLength )
    {
      if( !MaximumLength )
        return -2147483643;
      v6 = -2147483643;
      DestinationString->Length = MaximumLength - 1;
    }
  }
  LODWORD(BytesInUnicodeString) = SourceString->Length;
  v11 = RtlUnicodeToMultiByteN(
          DestinationString->Buffer,
          DestinationString->Length,
          (PULONG)&BytesInMultiByteString,
          SourceString->Buffer,
          BytesInUnicodeString);
  if( v11 >= 0 )
  {
    v10 = BytesInMultiByteString;
    DestinationString->Buffer[(unsigned int)BytesInMultiByteString] = 0;
  }
  if( v11 >= 0 )
    return v6;
  if( AllocateDestinationString )
  {
    ExFreePoolWithTag(DestinationString->Buffer, v10);
    DestinationString->Buffer = 0i64;
  }
  return v11;
}

Referenced by:

AslStringUpcaseToMultiByteN
CmpQueryEditionVersion
DbgUnicodeStringToAnsiString
EtwpBuildProcessEvent
ExpConvertLdrEntryToModuleInfo
ExpQueryModuleInformation
ExpSystemErrorHandler2
HdlspProcessDumpCommand
IopReassignSystemRoot
KsepGetModuleInfoByName
MmGetSystemRoutineAddress
NtQuerySystemEnvironmentValue
NtSetSystemEnvironmentValue
ObCreateObjectTypeEx
ViThunkAdjustExportAddressIfHooked