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; } } }
/// <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(); } }
/// <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); } }