SepVerifyDesktopAppxImage
NTSTATUS __stdcall SepVerifyDesktopAppxImage(
_EPROCESS *Process,
VOID *Token,
UINT8 VerifyTLAce,
_BYTE *PackageVerified){
char *v7;
unsigned int Flags3;
_SYSTEM_PROCESS_TRUST_LABEL_ACE *TrustLabelAce;
int v10;
NTSTATUS SecurityObject;
VOID **PoolWithTag;
char PackageNameVerified[4];
char NumberOfBytes[12];
char SecurityDescriptor[512];
*PackageVerified = 0;
v7 = 0i64;
Flags3 = Process->Flags3;
TrustLabelAce = 0i64;
*(_QWORD *)&NumberOfBytes[4] = 0i64;
PackageNameVerified[0] = 0;
if( (Flags3 & 1) != 0 )
return 0;
v10 = PsReferenceProcessFilePointer(Process, (VOID **)&NumberOfBytes[4]);
if( v10 >= 0 )
{
*(_DWORD *)NumberOfBytes = 512;
v7 = SecurityDescriptor;
v10 = RtlCreateSecurityDescriptor(SecurityDescriptor, 1ui64);
if( v10 >= 0 )
{
SecurityObject = ObQuerySecurityObject(
*(VOID **)&NumberOfBytes[4],
0x84ui64,
SecurityDescriptor,
0x200ui64,
(UINT64 *)NumberOfBytes);
if( SecurityObject == -1073741789 )
{
PoolWithTag = ExAllocatePoolWithTag(1ui64, *(unsigned int *)NumberOfBytes, 538994003i64);
v7 = (char *)PoolWithTag;
if( !PoolWithTag )
{
v10 = -1073741801;
goto LABEL_23;
}
v10 = RtlCreateSecurityDescriptor(PoolWithTag, 1ui64);
if( v10 < 0 )
goto LABEL_23;
SecurityObject = ObQuerySecurityObject(
*(VOID **)&NumberOfBytes[4],
0x84ui64,
v7,
*(unsigned int *)NumberOfBytes,
(UINT64 *)NumberOfBytes);
}
if( SecurityObject < 0 )
{
v10 = 0;
goto LABEL_23;
}
if( !v7 )
{
v10 = -1073739509;
goto LABEL_23;
}
v10 = SepVerifyDesktopAppxPackageName(Token, v7, PackageNameVerified);
if( v10 >= 0 && VerifyTLAce == 1 )
TrustLabelAce = SeGetTrustLabelAce(v7);
if( PackageNameVerified[0] != 1 )
goto LABEL_23;
if( VerifyTLAce == 1 )
{
if( TrustLabelAce )
goto LABEL_22;
v10 = -1073740702;
}
if( VerifyTLAce )
goto LABEL_23;
LABEL_22:
*PackageVerified = 1;
}
}
LABEL_23:
if( *(_QWORD *)&NumberOfBytes[4] )
ObfDereferenceObjectWithTag(*(VOID **)&NumberOfBytes[4], 0x746C6644ui64);
if( v7 && v7 != SecurityDescriptor )
ExFreePoolWithTag(v7, 0);
return v10;
}Referenced by:
No references.