- •Методическое пособие по выполнению лабораторных работ по курсу «Системное программное обеспечение и операционные системы»
- •Предисловие
- •1. Лабораторная работа № 1.
- •1.1. Теоретические сведения
- •1.3. Подключение отладчика
- •1.4. Контроль переменных и данных различного типа
- •1.5. Варианты заданий
- •2.1. Теоретические сведения
- •1.6. Контрольные вопросы
- •2. Лабораторная работа № 2 Отладка средствами ассемблера
- •3.2.Требования к программе.
- •Связь полей fat с физическим pасположением кластеров на диске показана на рис.4.1.
- •4.2.Требования к программе.
- •4.3. Варианты заданий.
- •4.4.Контрольные вопросы
- •5. Лабораторная работа № 5 Динамически подключаемые библиотеки dll в win32
- •5.1. Теоретические сведения
- •Создание файла Test.Def. Для создания файла Test.Def необходимо выполнить следующие инструкции:
- •5.2.Требования к программе:
- •5.3.Варианты заданий
- •5.4.Контрольные вопросы
- •6. Лабораторная работа №6 Функции и свойства потоков и процессов в win32
- •6.1. Теоретические сведения
- •6.2.Требования к программе:
- •6.3. Варианты заданий
- •6.4.Контрольные вопросы
- •7. Лабораторная работа № 7 Системный Реестр в windows nt.
- •7.1. Теоретические сведения
- •7.2.Требования к программе:
- •8.2.Требования к программе:
- •9.2.Требования к программе:
- •9.3. Варианты заданий.
- •9.4.Контрольные вопросы
- •10. Лабораторная работа № 10 Стили окон.
- •10.1. Теоретические сведения
- •Список рекомендуемой литературы
6.2.Требования к программе:
Написать программу, в которой необходимо реализовать:
Два потока, рабочие функции которых вычисляют сумму n чисел, а число n задается произвольно.
Отображение состояния выполняемых потоков с помощью линейных индикаторов.
Синхронизацию выполнения потоков с помощью объектов синхронизации.
Запуск потоков с помощью стандартных управляющих элементов.
Отчет должен содержать: постановку задачи, листинг кода всех модифицированных функций и их назначение, выводы.
6.3. Варианты заданий
6.4.Контрольные вопросы
Процесс, поток.
Многозадачность.
В каких состояниях может находиться поток?
Перечислите основные функции для работы с потоками.
Осветите механизм завершения работы потоков.
Расскажите о распределении процессорного времени между потоками.
Объясните необходимость механизма синхронизации потоков.
Перечислите основные объекты синхронизации.
Перечислите основные функции для создания потоков и объектов синхронизации потоков.
7. Лабораторная работа № 7 Системный Реестр в windows nt.
Цель работы: изучить структуру системного Реестра и основные функции работы с системным Реестром.
7.1. Теоретические сведения
Системный Реестр в WINDOWS NT является иерархической структурой, состоящей из разделов(key) и пар параметров(name-value pair). Эта структура используется как база данных, централизованно хранящая информацию о пользователях, приложениях, операционной системе и о конфигурации компьютера.
Разделы HKEY - это средства доступа к разделам Реестра самого верхнего уровня. Они определяются в API Реестра и являются точкой входа для разработчиков к остальному дереву Реестра. Пара «параметр - значение» состоит из трех частей : имени параметра, значения параметра и типа данных, т.е. типа значения. Основные три типа данных: двойное слово (DWORD - тип REG_DWORD), строка (STRING - тип REG_SZ) и двоичное значение (BINARY - тип REG_BINARY).
Функции WIN32 API для работы с системным Реестром.
Функция RegOpenKeyEx - открытие раздела. При успешном открытии раздела функцией возвращается ERROR_SUCCESS , в противном случае - код ошибки:
LONG RegOpenKeyEx (
HKEY hKey, // дескриптор корневого раздела
LPCTSTR lpSubKey, // указатель на адрес подраздела корневого раздела, в котором создается подраздел .
DWORD ulOptions, //зарезервирован и равен 0.
REGSAM samDesired, //доступ к разделу.
PHKEY phkResult //адрес дескриптора открываемого ключа.
); .
Параметры:
HKey - идентифицирует корневой ключ или один из ниже перечисленных :
HKEY_CLASSES_ROOT,
HKEY_CURRENT_USER.
HKEY_LOCAL_MACHINE,
HKEY_USERS.
samDesired - определяет доступ к разделу.
PhkResult - обработчик раздела приложения, т. е. дескриптор открытого ключа.
Пример написания функции:
RegOpenKeyEx(HKEY_CURRENT_USER,"SOFTWARE",0,KEY_READ | KEY_WRITE,&hKey); .
Эта функция открывает в корневом разделе HKEY_CURRENT_ USER подраздел SOFTWARE с разрешениями на создание подразделов, на запись данных подраздела, на получение данных подраздела, на перечисление подразделов, на извещение об изменении.
Функция RegCreateKeyEx создает новый подраздел внутри родительского.
При успешном создании раздела функцией возвращается ERROR_SUCCESS , в противном случае - код ошибки.
При создании нового подраздела необходимо сначала открыть его родительский раздел функцией RegOpenKeyEx.
Функция RegCreateKeyEx открывает раздел, если он существует, или создает его с новыми атрибутами:
LONG RegCreateKeyEx(
HKEY hKey, // дескриптор открытого ключа.
LPCTSTR lpSubKey, // адрес открываемого ключа не может быть равен NULL.
DWORD Reserved, // зарезервирован.
LPTSTR lpClass, // адрес имя класса или типа объекта.
DWORD dwOptions, // специальный тип раздела
REGSAM samDesired, // определяет маску доступа к ключу
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //указатель на структуру LPSECURITY_ATTRIBUTES
PHKEY phkResult, //адрес дескриптора созданного ключа
LPDWORD lpdwDisposition //указатель на буфер,
eсли ключ создан, то в поле определяемое LpdwDisposition, записывается значение REG_CREATED_NEW_KEY, а если ключ существовал и был открыт, - значение REG_OPENED_EXISTING_KEY.
Пример записи функции:
RegCreatKeyEx (hKey,"MyKey", 0, "", REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, NULL,&hMyKey, lpdwDisposition).
Функция RegSetValueEx устанавливает значение раздела в реестре. При использовании этой функции необходимо открыть раздел, значение которого необходимо установить. Эта функция позволяет создавать несколько пар параметр- значение в одном разделе.
При успешной установке функцией возвращается ERROR_SUCCESS , в противном случае - код ошибки:
LONG RegSetValueEx(
HKEY hKey, // дескриптор ключа, к которому добавляются данные.
LPCTSTR lpValueName,//-указатель на строку, содержащую имя добавляемых данных.
DWORD Reserved, // зарезервирован
DWORD dwType, // определяет тип информации, который будет сохранен в качестве данных.
CONST BYTE *lpData, // указатель непосредственно на данные, которые будут сохранены.
DWORD cbData // размер данных, на который указывает предыдущий аргумент.
); .
Пример записи функции:
RegSetValueEx((hMyKey, "m_name", 0, REG_SZ, (const unsigned char*)(LPCTSTR) lpszKeyValue, lpszKeyValue.GetLength()) .
Функция RegCloseKey закрывает раздел перед сохранением системных ресурсов:
LONG RegCloseKey(
HKEY hKey //дескриптор закрываемого раздела, возвращенный функцией RegOpenKeyEx.
); .
Пример записи функции: RegCloseKey(hMyKey) -закрывает подраздел My Key.
При успешном закрытии раздела функцией возвращается ERROR_SUCCESS , в противном случае - код ошибки.
Функция RegFlushKey записывает изменения, сделанные в Реестре на диск. Необходимость использования RegFlushKey возникает, когда нужна гарантия записи изменения в Реестре перед выполнением остального кода.
При успешном выполнении функцией возвращается ERROR_SUCCESS,
в противном случае - код ошибки.
LONG RegFlushKey (
HKEY hKey //дескриптор ключа для записи.
); .
Пример записи функции: RegFlushKey(hMyKey).
Функция RegDeleteKey удаляет раздел вместе с его значениями, если в разделе существуют подразделы, его удалить нельзя.
Нельзя удалить подраздел, если его родительский раздел был открыт функцией RegCreateKeyEx и не был закрыт функцией RegCloseKey:
LONG RegDeleteKey (
HKEY hKey, // дескриптор открытого ключа.
LPCTSTR lpSubKey // указатель на подстроку с именем удаляемого подраздела.
); .
Существует два способа удаления раздела:
1. В качестве первого параметра указать корневой раздел, во втором параметре - полный путь к удаляемому подразделу.
2. Открыть родительский раздел с помощью процедуры RegOpenKeyEx и затем передать его дескриптор в качестве первого параметра. В качестве второго параметра указывается имя дочернего раздела.
Пример написания функции:
RegDeleteKey (HKEY_CURRENT_USER,"SOFTWARE\\My Key").
