RtlConvertSidToUnicodeString

NTSTATUS __stdcall RtlConvertSidToUnicodeString(
        _UNICODE_STRING *UnicodeString,
        VOID *Sid,
        UINT8 AllocateDestinationString){
  NTSTATUS v6; 
  WCHAR *v7; 
  NTSTATUS result; 
  unsigned __int8 v9; 
  unsigned int v10; 
  int v11; 
  UINT64 v12; 
  _LARGE_INTEGER Value; 
  _UNICODE_STRING SourceString; 
  wchar_t Dst; 
  WCHAR String[2]; 
  WCHAR a4[248]; 
  __int16 v18; 
  __int16 v19; 

  SourceString = 0i64;
  if( RtlValidSid(Sid) != 1 || *(_BYTE *)Sid != 1 )
    return -1073741704;
  wcscpy_s(&Dst, 0x100ui64, (PWCHAR)L"S-1-");
  v6 = 0;
  v7 = String;
  if( *((_BYTE *)Sid + 2) || *((_BYTE *)Sid + 3) )
  {
    wcscat_s(&Dst, 0x100ui64, (WCHAR *)L"0x");
    v7 = a4;
    v11 = *((unsigned __int8 *)Sid + 5);
    Value.anonymous_0.HighPart = *((unsigned __int8 *)Sid + 3) + (*((unsigned __int8 *)Sid + 2) << 8);
    Value.anonymous_0.LowPart = *((unsigned __int8 *)Sid + 7)
                              + (*((unsigned __int8 *)Sid + 6) << 8)
                              + (v11 << 16)
                              + (*((unsigned __int8 *)Sid + 4) << 24);
    result = RtlLargeIntegerToUnicode(&Value, v12, (WCHAR *)0xFA, a4);
  }
  else
  {
    result = RtlIntegerToUnicode(
               *((unsigned __int8 *)Sid + 7)
             + (*((unsigned __int8 *)Sid + 6) << 8)
             + (*((unsigned __int8 *)Sid + 5) << 16)
             + (*((unsigned __int8 *)Sid + 4) << 24),
               0xAui64,
               0xFCu,
               String,
               (_STRING *)Value.QuadPart);
  }
  if( result >= 0 )
  {
    v9 = 0;
    if( *((_BYTE *)Sid + 1) )
    {
      while( 1 )
      {
        while( v7 < (WCHAR *)&v18 && *v7 )
          ++v7;
        *v7++ = 45;
        result = RtlIntegerToUnicode(
                   *((unsigned int *)Sid + v9 + 2),
                   0xAui64,
                   256 - (v7 - &Dst),
                   v7,
                   (_STRING *)Value.QuadPart);
        if( result < 0 )
          break;
        if( ++v9 >= *((_BYTE *)Sid + 1) )
          goto LABEL_14;
      }
    }
    else
    {
LABEL_14:
      if( AllocateDestinationString )
        return RtlCreateUnicodeString((INT64)UnicodeString, (INT8 *)&Dst) == 0 ? 0xC0000017 : 0;
      while( v7 < (WCHAR *)&v19 && *v7 )
        ++v7;
      v10 = 2 * (v7 - &Dst);
      if( v10 >= UnicodeString->MaximumLength )
        return -2147483643;
      SourceString.Length = v10;
      SourceString.Buffer = &Dst;
      SourceString.MaximumLength = v10 + 2;
      RtlCopyUnicodeString(UnicodeString, &SourceString);
      return v6;
    }
  }
  return result;
}

Referenced by:

AdtpBuildSidListString
CmpGetVirtualizationID
ExpWnfGetPermanentPerUserDataStoreHandle
LocalConvertSidToStringSidW
OpenGlobalizationUserSettingsKey_ForMua
PiDqOpenUserObjectRegKey
PspReadUserQuotaLimits
RtlFormatCurrentUserKeyPath
RtlpGetTokenNamedObjectPath
SepValidateReferencedCachedHandles
SysCtxRegOpenCurrentUserKey