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