RtlConvertSidToUnicodeString
NTSTATUS __stdcall RtlConvertSidToUnicodeString(
UNICODE_STRING *UnicodeString,
PVOID Sid,
UINT8 AllocateDestinationString){
NTSTATUS v6;
WCHAR *v7;
NTSTATUS result;
UNICODE_STRING *v9;
unsigned __int8 v10;
unsigned int v11;
int v12;
UINT64 v13;
_LARGE_INTEGER Value;
UNICODE_STRING SourceString;
wchar_t Dst;
WCHAR String[2];
WCHAR v18[248];
__int16 v19;
__int16 v20;
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, L"0x");
v7 = v18;
v12 = *((unsigned __int8 *)Sid + 5);
Value.HighPart = *((unsigned __int8 *)Sid + 3) + (*((unsigned __int8 *)Sid + 2) << 8);
Value.LowPart = *((unsigned __int8 *)Sid + 7)
+ (*((unsigned __int8 *)Sid + 6) << 8)
+ (v12 << 16)
+ (*((unsigned __int8 *)Sid + 4) << 24);
result = RtlLargeIntegerToUnicode(&Value, v13, 250i64, v18);
}
else
{
result = RtlIntegerToUnicode(
*((unsigned __int8 *)Sid + 7)
+ (*((unsigned __int8 *)Sid + 6) << 8)
+ (*((unsigned __int8 *)Sid + 5) << 16)
+ (*((unsigned __int8 *)Sid + 4) << 24),
0xAui64,
252i64,
String);
}
if( result >= 0 )
{
v10 = 0;
if( *((_BYTE *)Sid + 1) )
{
while( 1 )
{
while( v7 < (WCHAR *)&v19 && *v7 )
++v7;
*v7++ = 45;
result = RtlIntegerToUnicode(*((unsigned int *)Sid + v10 + 2), 0xAui64, 256 - (unsigned int)(v7 - &Dst), v7);
if( result < 0 )
break;
if( ++v10 >= *((_BYTE *)Sid + 1) )
goto LABEL_14;
}
}
else
{
LABEL_14:
if( AllocateDestinationString )
return RtlCreateUnicodeString(UnicodeString, &Dst) == 0 ? 0xC0000017 : 0;
while( v7 < (WCHAR *)&v20 && *v7 )
++v7;
v11 = 2 * (v7 - &Dst);
if( v11 >= UnicodeString->MaximumLength )
return -2147483643;
SourceString.Length = v11;
SourceString.Buffer = &Dst;
SourceString.MaximumLength = v11 + 2;
RtlCopyUnicodeString(UnicodeString, &SourceString, v9);
return v6;
}
}
return result;
}Referenced by:
AdtpBuildSidListString
CmpGetVirtualizationID
ExpWnfGetPermanentPerUserDataStoreHandle
LocalConvertSidToStringSidW
OpenGlobalizationUserSettingsKey_ForMua
PiDqOpenUserObjectRegKey
PspReadUserQuotaLimits
RtlFormatCurrentUserKeyPath
RtlpGetTokenNamedObjectPath
SepValidateReferencedCachedHandles
SysCtxRegOpenCurrentUserKey