ScAnsiToUnicodeString

__int64 __fastcall ScAnsiToUnicodeString(PCSZ SourceString, struct _UNICODE_STRING *a2){
  INT8 v4; 
  unsigned int v5; 
  NTSTATUS v6; 
  wchar_t *v7; 
  wchar_t *Buffer; 
  UNICODE_STRING v10; 
  struct _STRING DestinationString; 
  DestinationString = 0i64;
  *(_QWORD *)&v10.Length = 0i64;
  ScTrimString((char *)SourceString);
  RtlInitAnsiString(&DestinationString, SourceString, v4);
  v5 = RtlxAnsiStringToUnicodeSize(&DestinationString);
  v10.MaximumLength = v5;
  v10.Buffer = (wchar_t *)SC_ENV::Allocate(v5);
  if( v10.Buffer )
  {
    v6 = RtlAnsiStringToUnicodeString(&v10, &DestinationString, 0);
    if( v6 < 0 )
    {
      Buffer = v10.Buffer;
    }
    else
    {
      v7 = a2->Buffer;
      if( v7 )
        SC_ENV::Free(v7);
      Buffer = 0i64;
      *a2 = v10;
    }
    if( Buffer )
      SC_ENV::Free(Buffer);
  }
  else
  {
    return(unsigned int)-1073741670;
  }
  return(unsigned int)v6;
}

Referenced by:

SC_DEVICE::ExtractDeviceStrings