예제 #1
0
파일: UsersForm.cs 프로젝트: Dehax/DehaxOS
        private void AddGroup()
        {
            EditGroupForm editGroupForm = new EditGroupForm();

            if (editGroupForm.ShowDialog(this) == DialogResult.OK)
            {
                Group group = new Group();

                short newId = 0;
                for (int i = 0; i < GroupsManager.Count; i++)
                {
                    if (GroupsManager[i].groupId > newId)
                    {
                        newId = GroupsManager[i].groupId;
                    }
                }

                group.groupId   = ++newId;
                group.groupName = editGroupForm.GroupName;

                if (GroupsManager.AddGroup(group))
                {
                    groupsListBox.Items.Add(group.groupName);
                }
                else
                {
                    MessageBox.Show(this, "Группа с таким именем уже существует!", "Группа существует", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
        }
예제 #2
0
파일: DehaxOS.cs 프로젝트: Dehax/DehaxOS
        /// <summary>
        /// Выполняет инициализацию ядра ОС.
        /// </summary>
        public DehaxOS()
        {
            _fileSystemImage = new FileStream(FS_IMAGE_PATH, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite, FS_IMAGE_BUFFER, FileOptions.RandomAccess);
            FileSystem       = new DehaxFileSystem(_fileSystemImage, ROOT_USER_ID, ROOT_GROUP_ID);

            Scheduler = new DehaxScheduler();

            _usersManager  = new UsersManager();
            _groupsManager = new GroupsManager();

            IsLoggedIn = false;

            if (IsFirstRun)
            {
                User rootUser = new User(ROOT_USER_NAME, ROOT_USER_PASSWORD_HASH, ROOT_USER_ID, ROOT_GROUP_ID);
                _usersManager.AddUser(rootUser);
                Group rootGroup = new Group(ROOT_GROUP_NAME, ROOT_GROUP_ID);
                rootGroup.AddUser(rootUser);
                _groupsManager.AddGroup(rootGroup);

                ROOT_USER  = rootUser;
                User       = rootUser;
                IsLoggedIn = true;

                Install();

                IsLoggedIn = false;
            }
            else
            {
                Initialize();
            }
        }
예제 #3
0
파일: DehaxOS.cs 프로젝트: Dehax/DehaxOS
        /// <summary>
        /// Инициализирует ОС при запуске, загружает в ОЗУ системные структуры.
        /// </summary>
        private void Initialize()
        {
            byte[] usersFileData  = FileSystem.ReadFile(USERS_FILE_PATH);
            byte[] groupsFileData = FileSystem.ReadFile(GROUPS_FILE_PATH);

            string usersFileString  = Encoding.ASCII.GetString(usersFileData);
            string groupsFileString = Encoding.ASCII.GetString(groupsFileData);

            // Считываем группы.
            string[] groupsRecords = groupsFileString.Split(new string[] { NEW_LINE }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < groupsRecords.Length; i++)
            {
                string[] groupFields = groupsRecords[i].Split(' ');
                short    groupId     = short.Parse(groupFields[0]);
                string   groupName   = groupFields[1];

                Group group = new Group(groupName, groupId);
                if (groupId < 0)
                {
                    group.groupId *= -1;
                    group.deleted  = true;
                }

                _groupsManager.AddGroup(group);
            }

            // Считываем пользователей.
            string[] usersRecords = usersFileString.Split(new string[] { NEW_LINE }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < usersRecords.Length; i++)
            {
                string[] userFields   = usersRecords[i].Split(' ');
                short    userId       = short.Parse(userFields[0]);
                string   userName     = userFields[1];
                byte[]   passwordHash = Utils.HexStringToByteArray(userFields[2]);
                short    groupId      = short.Parse(userFields[3]);

                User user = new User(userName, passwordHash, userId, groupId);
                if (userId < 0)
                {
                    user.userId *= -1;
                    user.deleted = true;
                }

                if (userId == ROOT_USER_ID && groupId == ROOT_GROUP_ID)
                {
                    ROOT_USER = user;
                }

                _usersManager.AddUser(user);
                _groupsManager.AddUserToGroup(user.groupId, user);
            }
        }