SepNewTokenAsRestrictedAsProcessToken
NTSTATUS __stdcall SepNewTokenAsRestrictedAsProcessToken(
VOID *NewToken,
VOID *ProcessToken,
_BYTE *NewTokenAsRestrictedAsProcessToken){
int v4;
unsigned int v6;
unsigned int v7;
__int64 v8;
unsigned int v10;
unsigned int v11;
void *v12;
__int64 v13;
unsigned int v14;
unsigned int v15;
unsigned int v16;
unsigned int v17;
__int64 v18;
void *v19;
void *v20;
*NewTokenAsRestrictedAsProcessToken = 0;
v4 = *((_DWORD *)ProcessToken + 50);
if( ((v4 & 0x800) == 0 || (*((_DWORD *)NewToken + 50) & 0x800) != 0)
&& (!SeTokenIsRestricted(ProcessToken) || SeTokenIsRestricted(NewToken))
&& (!SeTokenIsWriteRestricted(ProcessToken) || SeTokenIsWriteRestricted(NewToken))
&& (!SeTokenIsRestricted(ProcessToken) || *((_DWORD *)ProcessToken + 32) >= *((_DWORD *)NewToken + 32))
&& (~*((_QWORD *)ProcessToken + 9) & *((_QWORD *)NewToken + 9)) == 0i64
&& (~*((_QWORD *)ProcessToken + 8) & *((_QWORD *)NewToken + 8)) == 0i64
&& (~v4 & *((_DWORD *)NewToken + 50) & 0x1000) == 0 )
{
if( SeTokenIsRestricted(ProcessToken) && (v14 = *((_DWORD *)NewToken + 32), v15 = 0, v14) )
{
v16 = *((_DWORD *)ProcessToken + 32);
while( 1 )
{
v17 = 0;
if( v16 )
{
v18 = *((_QWORD *)ProcessToken + 20);
v19 = *(void **)(*((_QWORD *)NewToken + 20) + 16i64 * v15);
do
{
if( RtlEqualSid(v19, *(PVOID *)(v18 + 16i64 * v17)) )
break;
++v17;
}
while( v17 < v16 );
}
if( v17 == v16 )
break;
if( ++v15 >= v14 )
goto LABEL_10;
}
}
else
{
LABEL_10:
v6 = *((_DWORD *)ProcessToken + 31);
v7 = 0;
if( !v6 )
{
LABEL_14:
*NewTokenAsRestrictedAsProcessToken = 1;
return 0;
}
v8 = *((_QWORD *)ProcessToken + 19);
while( 1 )
{
if( (*(_DWORD *)(v8 + 16i64 * v7 + 8) & 0x10) != 0 )
{
v10 = *((_DWORD *)NewToken + 31);
v11 = 0;
if( v10 )
{
v12 = *(void **)(v8 + 16i64 * v7);
v13 = *((_QWORD *)NewToken + 19);
v20 = v12;
while( !RtlEqualSid(v12, *(PVOID *)(v13 + 16i64 * v11)) )
{
v12 = v20;
if( ++v11 >= v10 )
goto LABEL_13;
}
if( (*(_DWORD *)(v13 + 16i64 * v11 + 8) & 0x10) == 0 )
break;
}
}
LABEL_13:
if( ++v7 >= v6 )
goto LABEL_14;
}
}
}
return -1073741727;
}Referenced by:
NtDuplicateToken
SepFilterToken