RtlGetAppContainerNamedObjectPath
NTSTATUS __stdcall RtlGetAppContainerNamedObjectPath(
PVOID Token,
PVOID AppContainerSid,
UINT8 RelativePath,
UNICODE_STRING *ObjectPath){
NTSTATUS result;
char v9;
int TokenInformation;
int v11;
__int64 v12;
PSID Sid2[12];
PSID Sid1[12];
UINT64 ReturnLength;
TokenInformation = 0;
LODWORD(ReturnLength) = 0;
memset((INT64)Sid2, 0i64);
memset((INT64)Sid1, 0i64);
if( !ObjectPath )
return -1073741811;
if( Token && AppContainerSid )
return -1073741776;
LODWORD(v12) = 0;
v11 = 0;
if( AppContainerSid )
{
Token = (PVOID)-4i64;
v9 = 0;
}
else
{
v9 = 1;
if( Token )
goto LABEL_11;
Token = (PVOID)-6i64;
}
if( !AppContainerSid )
{
LABEL_11:
result = NtQueryInformationToken(Token, TokenIsAppContainer, &TokenInformation, 4ui64, &ReturnLength);
if( result < 0 )
return result;
if( !TokenInformation )
{
result = 0;
*ObjectPath = 0i64;
return result;
}
}
if( !RelativePath || !v9 )
return RtlpGetTokenNamedObjectPath(Token, AppContainerSid);
result = NtQueryInformationToken(
(PVOID)0xFFFFFFFFFFFFFFFCi64,
TokenIsRestricted|TokenGroups,
&v11,
4ui64,
&ReturnLength);
if( result < 0 )
return result;
if( !v11 )
return RtlpGetTokenNamedObjectPath(Token, AppContainerSid);
result = NtQueryInformationToken(Token, TokenIsRestricted|TokenGroups, &v12, 4ui64, &ReturnLength);
if( result < 0 )
return result;
if( !(_DWORD)v12 )
return -1073741637;
result = NtQueryInformationToken((PVOID)0xFFFFFFFFFFFFFFFCi64, TokenUser, Sid2, 0x58ui64, &ReturnLength);
if( result >= 0 )
{
result = NtQueryInformationToken(Token, TokenUser, Sid1, 0x58ui64, &ReturnLength);
if( result >= 0 )
{
if( !RtlEqualSid(Sid1[0], Sid2[0]) )
return -1073741637;
return RtlpGetTokenNamedObjectPath(Token, AppContainerSid);
}
}
return result;
}Referenced by:
No references.