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