- •Введение
- •1. Методы и средства получения информации о ресурсах вычислительной системы
- •1.1. Получение информации о выполняющихся процессах и используемых ими ресурсах
- •1.1.1. Получение списка процессов, выполняющихся в системе
- •1.1.1.1. Использование функций CreateToolHelp32Snapshot () и Process32xxxx() для получения списка имен процессов
- •1.1.1.2. Использование функций CreateToolHelp32Snapshot () и Thread32xxxx() для получения сведений о приоритетах потоков процессов
- •1.1.2. Использование функций CreateToolHelp32Snapshot () и Module32xxxx() для получения списка модулей
- •1.1.3. Использование функций CreateToolHelp32Snapshot () и Heap32Listxxxx() для получения списка куч
- •1.1.4. Получение дополнительной информации о процессах и потоках
- •1.1.4.2. Получение информации счетчиков ввода-вывода и количества описателей (дескрипторов)
- •Получение информации о загруженных драйверах
- •1.1.6. Использование функции NtQuerySystemInformation
- •1.1.6.1. Назначение аргументов функции
- •1.1.6.2. Вызов функции NtQuerySystemInformation
- •1.1.6.3. Получение сведений о процессах и потоках
- •1.1.6.4. Преобразование данных из формата FileTime в формат SystemTime
- •1.1.6.5. Вычисление загрузки процессора
- •1.1.7 Формирование протокола использования процессора
- •1.2. Получение информации о ресурсах виртуальной памяти и системе
- •1.2.1. Функции и структуры данных управления виртуальной памятью
- •1.2.2. Получение информации о структуре виртуального адресного пространства
- •1.3. Получение информации о файловой системе
- •1.3.1. Определение имеющихся логических дисков
- •1.3.2. Получение информации о томах
- •1.3.3. Поиск файлов
- •1.4. Методы и средства работы с реестром
- •1.4.1. Открытие и закрытие родительского раздела
- •1.4.2. Создание подразделов
- •1.4.3. Установка значения параметра
- •1.4.4. Получение значения параметра
- •1.4.5. Уведомление приложения об изменениях в разделе реестра
- •1.4.6. Использование компонента Registry
- •1.4.7. Поиск в разделе реестра имен файлов приложений, являющихся локальными серверами автоматизации
- •1.5. Использование функции ReadDirectoryChangesW для отслеживания изменений в файловой системе
- •2. Средства управления выполнением прикладных процессов
- •2.1. Функции Win32 для создания и управления процессами
- •2.2. Функции Win32 для создания и управления потоками
- •2.3. Завершение выбранного процесса
- •3. Методы реализации мониторинга ресурсов
- •3.1. Мониторинг процессов
- •3.2. Программирование «с защитой от ошибок»
- •Требования к разрабатываемому монитору
- •4.1. Требования к выполняемым функциям
- •4.2. Требования к реализации
- •4.3. Требования к документации
- •4.4. Список вопросов для приема курсовой работы
- •Библиографический список
- •Приложение 1 График выполнения курсовой работы
- •Приложение 2 Примеры описания реализации отдельных функций монитора и оформления разделов пояснительной записки
- •1. Вывод списка выполняющихся процессов в виде дерева.
- •2. Формирование протокола использования процессора
- •3. Протоколирование моментов времени внесения изменений в файловую систему с записью выполненных изменений и имён приложений, выполнивших изменения.
- •4. Поиск одинаковых файлов, хранящихся в различных каталогах (необходимо обеспечить возможно большую скорость выполнения операции). Вводить имена файлов или каталогов перед началом поиска не следует.
- •9. Вывод списка прав текущего пользователя
- •10. Пример составления перечня используемых компонентов
- •11. Пример заполнения таблицы использованных компонентов
- •12. Пример описания основных переменных
- •13. Пример составления руководства пользователя по инсталляции и использованию монитора
- •14. Пример описания процедуры тестирования монитора
- •Системное программное обеспечение Учебное пособие
- •443100, Г. Самара, ул. Молодогвардейская, 244.
- •443100, Г. Самара, ул. Молодогвардейская, 244. Корпус № 8
1.4. Методы и средства работы с реестром
1.4.1. Открытие и закрытие родительского раздела
Перед началом выполнения любых операций с разделом его необходимо открыть ( как и при работе с любой базой данных). Для открытия раздела используется функция
RegOpenKeyEx
( HKEY_LOCAL_MACHINE, // имя корневого раздела
'SOFTWARE\Borland', // имя открываемого подраздела
0, // зарезервированное значение
KEY_ALL_ACCESS, // вид доступа к разделу - полный доступ
hkkey ) //возвращаемое значение - Handle раздела - типа HKEY.
При успешном открытии возвращается ERROR_SUCCESS, т.е. 0. Если подраздел не существует, возвращается 2.
После окончания работы с подразделом его необходимо закрыть, используя функцию
RegCloseKey (hkkey);
1.4.2. Создание подразделов
Для создания подраздела в существующем разделе используется функция RegCreateKeyEx, с помощью которой можно открыть существующий раздел, или создать новый подраздел. Пример вызова функции
RegCreateKeyEx
( HKEY_LOCAL_MACHINE, // имя корневого раздела
'SOFTWARE\myrazd', // имя создаваемого подраздела
0, // резерв, всегда 0
'', // имя класса или типа объекта раздела - пустая строка
REG_OPTION_NON_VOLATILE, // постоянный раздел
KEY_ALL_ACCESS, // вид доступа к разделу
nil, // атрибут безопасности
hkkey, // описатель раздела, тип HKEY
@result ) : integer - код ошибки // Result - типа DWORD.
Параметр result типа DWORD принимает значения REG_CREATED_NEW_KEY или REG_OPENED_EXISTING_KEY.
1.4.3. Установка значения параметра
Функция RegSetValueEx создает в открытом или созданном разделе пару параметр-значение. Пример вызова функции
RegSetValueEx
( описатель созданного или открытого раздела,
имя пары параметр-значение,
0, // резерв - всегда 0
REG_SZ, // тип значения - строка с 0 в конце
Strd, // переменная типа Pchar, которой присвоено необходимое значение Length (strd) //длина значения
) ;
1.4.4. Получение значения параметра
Для чтения значения параметра используется функция RegQueryValueEx.
Необходимо описать переменные:
dwType : DWORD - тип возвращаемого значения
buf : Array [1..n] of char -массив для получения значения строкового параметра
len : DWORD - длина буфера
и присвоить переменным значения dwType := REG_SZ;
len:= N;
Вызов функции для чтения значения параметра
Error := RegQueryValueEx (
hkkey, // handle открытого раздела
имя параметра, // имя должно быть записано в апострофах
nil, // зарезервированное значение
@dwType, // адрес типа возвращаемого значения
@buf, // адрес буфера
@len );
if Error = ERROR_SUCCESS then // если нет ошибки - получить значение параметра
for k:=1 to len-1 do str := str + buf [ k ];
Получение информации из открытого раздела - RegQueryInfoKey (). Функция возвращает:
количество подразделов;
длину самого длинного имени подраздела;
количество пар;
длину самого длинного имени параметра;
длину самого длинного значения;
Просмотр пар параметр- значение - функция RegEnumValue (). Среди прочего, возвращает информацию о типе значения данной пары.