AuthzBasepCommitSecurityAttributeChanges
INT64 __fastcall AuthzBasepCommitSecurityAttributeChanges(INT64 a1, INT64 a2){
int v2;
unsigned __int8 v3;
INT64 v5;
__int64 v6;
_QWORD *v7;
INT64 *v8;
_QWORD *v9;
_QWORD *v10;
int v11;
_QWORD *v12;
bool v13;
__int64 v14;
_QWORD *v15;
int v16;
_QWORD *v17;
INT64 v18;
INT64 *v19;
__int64 v21;
_QWORD *v22;
v2 = *(_DWORD *)(a2 + 56);
v3 = 0;
if( (v2 & 2) != 0 )
{
v5 = a2 + 16;
v6 = *(_QWORD *)(a2 + 16);
if( *(_QWORD *)(v6 + 8) != v5 )
goto LABEL_28;
v7 = *(_QWORD **)(v5 + 8);
if( *v7 != v5 )
goto LABEL_28;
*v7 = v6;
*(_QWORD *)(v6 + 8) = v7;
*(_DWORD *)(a2 + 56) &= ~2u;
v2 = *(_DWORD *)(a2 + 56);
if( a1 )
{
--*(_DWORD *)(a1 + 24);
v2 = *(_DWORD *)(a2 + 56);
}
}
if( (v2 & 4) != 0 )
{
AuthzBasepRemoveSecurityAttributeFromLists((DEVICE_OBJECT *)a1);
AuthzBasepFreeSecurityAttributeValues(a2, 0i64, v18, v19);
return 1;
}
if( (v2 & 1) == 0 )
{
v8 = *(INT64 **)(a1 + 16);
if( *v8 == a1 + 8 )
{
*(_QWORD *)a2 = a1 + 8;
*(_QWORD *)(a2 + 8) = v8;
*v8 = a2;
*(_QWORD *)(a1 + 16) = a2;
*(_DWORD *)(a2 + 56) |= 1u;
++*(_DWORD *)a1;
goto LABEL_10;
}
LABEL_28:
__fastfail(3u);
}
LABEL_10:
v9 = (_QWORD *)(a2 + 96);
while( 1 )
{
v10 = (_QWORD *)*v9;
if( (_QWORD *)*v9 == v9 )
return v3;
v11 = *((_DWORD *)v10 + 4);
v12 = v10 - 2;
v13 = (v11 & 4) != 0;
if( (v11 & 2) != 0 )
{
v14 = *v10;
if( *(_QWORD **)(*v10 + 8i64) != v10 )
goto LABEL_28;
v15 = (_QWORD *)v10[1];
if( (_QWORD *)*v15 != v10 )
goto LABEL_28;
*v15 = v14;
*(_QWORD *)(v14 + 8) = v15;
*((_DWORD *)v12 + 8) &= ~2u;
--*(_DWORD *)(a2 + 88);
v11 = *((_DWORD *)v12 + 8);
}
v16 = v11 & 1;
if( v13 )
{
if( v16 )
{
v21 = *v12;
if( *(_QWORD **)(*v12 + 8i64) != v12 )
goto LABEL_28;
v22 = (_QWORD *)v12[1];
if( (_QWORD *)*v22 != v12 )
goto LABEL_28;
*v22 = v21;
*(_QWORD *)(v21 + 8) = v22;
*((_DWORD *)v12 + 8) &= ~1u;
--*(_DWORD *)(a2 + 60);
if( (v12[4] & 4) != 0 )
--*(_DWORD *)(a2 + 64);
}
ExFreePoolWithTag(v12, 0);
}
else if( !v16 )
{
v17 = *(_QWORD **)(a2 + 80);
if( *v17 != a2 + 72 )
goto LABEL_28;
*v12 = a2 + 72;
v12[1] = v17;
*v17 = v12;
*(_QWORD *)(a2 + 80) = v12;
*((_DWORD *)v12 + 8) |= 1u;
++*(_DWORD *)(a2 + 60);
}
}
}Referenced by:
AuthzBasepFinaliseSecurityAttributesList