WdipAccessCheck
INT64 __fastcall WdipAccessCheck(){
ACL *v0;
unsigned int v1;
_DWORD *PoolWithTag;
UINT64 v3;
_DWORD *v4;
unsigned __int8 *v6;
unsigned int v7;
ACL *v8;
ACL *v9;
UINT64 v10;
INT64 AccessStatus;
__int16 v12;
DWORD GrantedAccess;
struct _SECURITY_SUBJECT_CONTEXT SubjectContext;
GENERIC_MAPPING GenericMapping;
HIDWORD(AccessStatus) = 0;
v12 = 1280;
v0 = 0i64;
GenericMapping.GenericRead = 131073;
GrantedAccess = 0;
GenericMapping.GenericWrite = 0x20000;
GenericMapping.GenericExecute = 0x20000;
GenericMapping.GenericAll = 2031617;
memset(&SubjectContext, 0, sizeof(SubjectContext));
v1 = RtlLengthRequiredSid(6ui64);
PoolWithTag = ExAllocatePoolWithTag(PagedPool, v1, 0x73494457ui64);
v4 = PoolWithTag;
if( !PoolWithTag )
return 3221225626i64;
LOBYTE(v3) = 6;
LODWORD(AccessStatus) = RtlInitializeSid(PoolWithTag, (SID_IDENTIFIER_AUTHORITY *)((char *)&AccessStatus + 4), v3);
if( (int)AccessStatus >= 0 )
{
v6 = (unsigned __int8 *)SeLocalSystemSid;
v4[2] = 80;
v4[3] = -1324354722;
v4[4] = 78537857;
v4[5] = 698502321;
v4[6] = 558674196;
v4[7] = 1451644582;
v7 = 4 * (*((unsigned __int8 *)v4 + 1) + *((unsigned __int8 *)SeAliasAdminsSid + 1) + v6[1]) + 108;
v8 = (ACL *)ExAllocatePoolWithTag(PagedPool, v7, 0x73494457ui64);
v0 = v8;
if( v8 )
{
v9 = v8 + 5;
LODWORD(AccessStatus) = RtlCreateSecurityDescriptor(v8, 1ui64);
if( (int)AccessStatus >= 0 )
{
LODWORD(AccessStatus) = RtlCreateAcl(v9, v7 - 40, 2u);
if( (int)AccessStatus >= 0 )
{
LODWORD(AccessStatus) = RtlAddAccessAllowedAce(v9, 2u, 1u, SeAliasAdminsSid);
if( (int)AccessStatus >= 0 )
{
LODWORD(AccessStatus) = RtlAddAccessAllowedAce(v9, 2u, 1u, SeLocalSystemSid);
if( (int)AccessStatus >= 0 )
{
LODWORD(AccessStatus) = RtlAddAccessAllowedAce(v9, 2u, 1u, v4);
if( (int)AccessStatus >= 0 )
{
LODWORD(AccessStatus) = RtlSetDaclSecurityDescriptor(v0, 1u, v9, 0);
if( (int)AccessStatus >= 0 )
{
SeCaptureSubjectContext(&SubjectContext);
LODWORD(v10) = 0;
SeAccessCheck(
v0,
&SubjectContext,
0,
1ui64,
v10,
0i64,
&GenericMapping,
1,
(UINT64 *)&GrantedAccess,
&AccessStatus);
SeReleaseSubjectContext(&SubjectContext);
}
}
}
}
}
}
}
else
{
LODWORD(AccessStatus) = -1073741670;
}
}
ExFreePoolWithTag(v4, 0);
if( v0 )
ExFreePoolWithTag(v0, 0);
return(unsigned int)AccessStatus;
}Referenced by:
WdiUpdateSem