
- •Введение
- •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
Приложение 2 Примеры описания реализации отдельных функций монитора и оформления разделов пояснительной записки
1. Вывод списка выполняющихся процессов в виде дерева.
Описание решения
Вывод списка выполняющихся процессов в виде дерева организован посредством сканирования запущенных в системе процессов. Для этой цели были использованы функции Win32API: CreateToolhelp32Snapshot, Process32First, Process32Next.
Результат выполнения функции:
Рисунок П2.1 –дерево процессов
2. Формирование протокола использования процессора
Описание решения
На основании данных, полученных при выполнении процедур пункта 1, строится протокол использования процессора. Принцип основывается на сравнении двух списков процессов – до вызова CreateToolHelp32SnapShot и после него. При первом вызове функции лист «ДО» пуст. Поэтому в протокол заносятся все запущенные в данный момент приложения. Время запуска берётся из массива данных, полученных с помощью функции CreateToolHelp32SnapShot. Время завершения процесса – время, в которое монитор не обнаружил искомый процесс работающим. Так как период опроса 1 секунда, то погрешность невелика.
Результат работы монитора процессов:
Рисунок П2.2 – протокол использования процессора
3. Протоколирование моментов времени внесения изменений в файловую систему с записью выполненных изменений и имён приложений, выполнивших изменения.
Описание решения
Следить за изменениями в реестре можно с помощью сохранения образа файловой системы, последующим сохранением другого образа и их сравнением. Но если речь идёт о жёстких дисках 40 и более ГБ, такой подход неверен, т.к. требует значительных системных ресурсов и занимает очень много времени.
Другой подход – использование функции Win32API FindFirstChangeNotification. Этот метод гораздо более быстр и экономичен, но, к сожалению, не даёт информации о приложении, сделавшем изменения.
Для решения задачи будем использовать драйвер REGMON, взятый с www.sysinternals.com. Для работы с драйвером используется модуль FileMon.pas, взятый с www.vingrad.ru . При старте программы создаётся объект типа TFileMon и объекту передаются основные параметры
- Путь к файлу драйвера
- Период опроса драйвера.
При возникновении события изменения ФС, начинает работу функция TForm1.filemonOperationBegin, которая заносит в таблицу протокола все необходимые данные.
Пользователю предоставляется возможность установки фильтров на процессы, присутствующие в протоколе и операции.
4. Поиск одинаковых файлов, хранящихся в различных каталогах (необходимо обеспечить возможно большую скорость выполнения операции). Вводить имена файлов или каталогов перед началом поиска не следует.
Описание решения
Для поиска одинаковых файлов, хранящихся в различных каталогах, используется рекурсивная функция SameRecurseFound. Для быстроты поиска создается дополнительный поток SameFindThread.
5. Принудительное завершение процесса, выбранного пользователем
Описание решения
Для завершения процесса выбранного пользователем необходимо использовать функцию OpenProcess, указывая ей уровень прав PROCESS_TERMINATE, и функцию TerminateProcess, передавая ей в качестве параметра дескриптор, возвращенный вызовом OpenProcess.
6. Конфигурирование монитора (период опроса, список показываемых процессов, список процессов, которые нельзя завершать). Сохранение конфигурации ini-файле
Описание решения
Вводятся имена процессов, которые нельзя завершать, устанавливается время опроса системы, конфигурация сохраняется в ini-файле.
7. Вывод информации о процессоре (получаемой с помощью команды CPUID)
Описание решения
Для решения используется модуль CpuId и классы из этого модуля TcpuData, TcpuRec. Для получения информации используется команда процессора CPUID, перед её вызовом инициализируется регистр EAX, числом, определяющим какую именно информацию нужно вернуть. Возвращаемая информация находится в регистрах EAX, EBX, ECX, EDX. Значения в этих регистрах просматриваются с использованием масок, и выводится в виде таблицы.
8. Вывод списка зарегистрированных в ОС расширений имен файлов и связанных с ними приложений (с путями)
Описание решения
Для получения списка необходимо просмотреть раздел реестра HKEY_CLASSES_ROOT\, и имена всех подкаталогов, которые начинаются с “.”, являются расширениями зарегистрированных расширений файлов. Для работы с реестром используются функции WinAPI: RegOpenKeyEx(), RegQueryInfoKey(), RegQueryValueEx(), RegEnumValue(). Для получения пути к приложению, необходимо найти, раздел, имя которого совпадает со значением параметра по умолчанию раздела “HKEY_CLASSES_ROOT\._имя_расширения_”. В найденном разделе найти “shell\open\command”, значение параметра по умолчанию данного раздела и будет путем к приложению, связанному с расширением.