IoCheckFunctionAccess

NTSTATUS __stdcall IoCheckFunctionAccess(
        UINT64 GrantedAccess,
        UINT8 MajorFunction,
        UINT8 MinorFunction,
        UINT64 IoControlCode,
        VOID *Arg1,
        VOID *Arg2){
  NTSTATUS v6; 
  char v7; 
  int v8; 
  char v10; 
  bool v11; 
  int v12; 
  int v13; 
  int v14; 
  UINT64 DesiredAccess; 

  v6 = 0;
  LODWORD(DesiredAccess) = 0;
  if( MajorFunction > 9u )
  {
    if( MajorFunction == 10 )
    {
      if( (~(_DWORD)GrantedAccess & IopQueryFsOperationAccess[*(int *)Arg2]) != 0 )
        return -1073741790;
      return v6;
    }
    if( MajorFunction == 11 )
    {
      v11 = (~(_DWORD)GrantedAccess & IopSetFsOperationAccess[*(int *)Arg2]) != 0;
      goto LABEL_20;
    }
    if( MajorFunction != 12 )
    {
      if( MajorFunction > 0xCu )
      {
        if( MajorFunction <= 0xFu )
        {
          v14 = (unsigned __int16)IoControlCode >> 14;
          if( v14 && (v14 & (unsigned int)GrantedAccess) == 0 )
            return -1073741790;
          return v6;
        }
        switch( MajorFunction )
        {
          case 0x11u:
            v7 = GrantedAccess & 3;
            goto LABEL_8;
          case 0x14u:
            SeQuerySecurityAccessMask(*(unsigned int *)Arg1, &DesiredAccess);
            break;
          case 0x15u:
            SeSetSecurityAccessMask(*(unsigned int *)Arg1, &DesiredAccess);
            break;
          default:
            return -1073741808;
        }
        v11 = ((unsigned int)DesiredAccess & ~v13) != 0;
        goto LABEL_20;
      }
      return -1073741808;
    }
LABEL_18:
    v10 = (GrantedAccess & 1) == 0;
LABEL_19:
    v11 = v10 != 0;
LABEL_20:
    v8 = -v11;
    return v8 & 0xC0000022;
  }
  switch( MajorFunction )
  {
    case 9u:
      v10 = ~(_BYTE)GrantedAccess & 2;
      goto LABEL_19;
    case 0u:
    case 2u:
      return v6;
    case 3u:
      goto LABEL_18;
    case 4u:
      v7 = GrantedAccess & 6;
LABEL_8:
      v8 = -(v7 == 0);
      return v8 & 0xC0000022;
  }
  if( MajorFunction != 5 )
  {
    switch( MajorFunction )
    {
      case 6u:
        v12 = IopSetOperationAccess[*(int *)Arg1];
        goto LABEL_23;
      case 7u:
        v10 = ~(_BYTE)GrantedAccess & 8;
        goto LABEL_19;
      case 8u:
        v10 = ~(_BYTE)GrantedAccess & 0x10;
        goto LABEL_19;
    }
    return -1073741808;
  }
  v12 = IopQueryOperationAccess[*(int *)Arg1];
LABEL_23:
  if( v12 && (~(_DWORD)GrantedAccess & v12) != 0 )
    return -1073741790;
  return v6;
}

Referenced by:

No references.