ExpCheckIRTimerAccess
NTSTATUS __stdcall ExpCheckIRTimerAccess(INT8 PreviousMode){
CHAR v1;
unsigned __int16 v2;
int v3;
VOID *v4;
NTSTATUS v5;
UINT8 v6;
unsigned __int16 a7_2;
UINT8 IsMember;
a7_2 = v2;
v3 = PreviousMode;
*(_QWORD *)&PreviousMode = (unsigned __int16)PreviousMode;
if( (unsigned int)(unsigned __int16)PreviousMode - 1 > 0xE
|| (unsigned int)HIWORD(v3) > *((unsigned __int8 *)&ExpIRTimerDescs + 24 * PreviousMode + 16) )
{
return -1073741811;
}
v4 = (VOID *)*(&ExpIRTimerDescs + 3 * PreviousMode + 1);
v5 = 0;
if( v1 )
{
IsMember = 0;
if( v4 )
{
if( RtlCheckTokenMembership(0i64, v4, &IsMember) < 0 )
v6 = 0;
else
v6 = IsMember;
}
else
{
if( ExpCheckWakeTimerAccess(v1) < 0 || !ExCheckValidIRTimerId(v3, a7_2) )
return -1073741790;
v6 = 1;
}
if( v6 )
return v5;
return -1073741790;
}
if( v4 || !ExCheckValidIRTimerId(v3, a7_2) )
__fastfail(5u);
return 0;
}Referenced by:
NtCreateTimer2