
- •Введение
- •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.1.1.2. Использование функций CreateToolHelp32Snapshot () и Thread32xxxx() для получения сведений о приоритетах потоков процессов
Для получения сведений о приоритетах потоков необходимо извлечь из снимка состояния системы с помощью функций Thread32First() и Thtead32Next () значения соответствующих полей.
Обращение к функциям имеет вид:
Thread32First ( hSnapshot, LPTHREADEntry32)
Thtead32Next ( hSnapshot, LPTHREADEntry32).
Первый аргумент - хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).
Второй аргумент - структура, содержащая 7 полей, основные поля описаны ниже.
Первое поле структуры - dwSize - должно перед вызовом функции содержать размер структуры в байтах - sizeof (THREADEntry32).
Поле th32OwnerProcessID содержит идентификатор родительского процесса.
Поле tpBasePri содержит текущий приоритет потока.
Поле tpDeltaPri содержит разность между текущим уровнем приоритета потока и базовым уровнем, то есть тем, который присваивается при создании потока.
Пример 2. Получить список выполняющихся в системе потоков, используя рассмотренные выше функции. Вывести содержимое полей 2 и 3 структуры THREADEntry32
На форме размещены компоненты ListView, Label и Button, обработчик события OnClick имеет вид:
var
Sh : Thandle;
Th : TTHREADENTRY32;
LstIt : TlistItem;
begin
Sh := CreateToolHelp32Snapshot (TH32CS_SNAPALL,0);
Th.dwSize := sizeof (TTHREADEntry32);
Thread32First(sh,Th);
ListView1.Items.Clear;
LstIt :=ListView1.Items.Add;
LstIt.Caption:=IntToStr(Th.th32OwnerProcessID);
LstIt.SubItems.Add(IntToStr(Th.tpBasePri));
repeat
LstIt :=ListView1.Items.Add;
LstIt.Caption:=IntToStr(Th.th32OwnerProcessID);
LstIt.SubItems.Add(IntToStr(Th.tpBasePri))
until not Thread32Next (sh,Th);
CloseHandle(Sh);
end;
Созданы 2 Columns, имеющие заголовки Идент процесса и Базовый приор потока (свойства ListView), а свойство ViewStyle установлено в vsReport.
1.1.2. Использование функций CreateToolHelp32Snapshot () и Module32xxxx() для получения списка модулей
Для получения сведений о приоритетах потоков необходимо извлечь из снимка состояния системы с помощью функций Module32First() и Module32Next () значения соответствующих полей.
Обращение к функциям имеет вид:
Module32First (hSnapshot, LPMODULEENTRY32);
Module32Next (hSnapshot, LPMODULEENTRY32).
Первый аргумент - хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).
Второй аргумент - структура, содержащая 10 полей:
dwSize : DWORD -
th32ModuleID : DWORD – размер модуля
th32ProcessID : DWORD - идентификатор процесса, владеющего модулем
GlblcntUsage : DWORD - счетчик глобальных пользователей модуля
ProccntUsage : DWORD - счетчик процессов - пользователей
modBaseAddr : DWORD – базовый адрес модуля
modBaseSize : DWORD – базовый размер модуля
hModule : HMODULE - хэндл модуля
szModule : array [1.. MAX_MODULE_NAME32 + 1] of char – имя модуля
szExePath : array [1.. MAX_PATH] of char – путь размещения модуля.
1.1.3. Использование функций CreateToolHelp32Snapshot () и Heap32Listxxxx() для получения списка куч
Для получения списка куч необходимо извлечь из снимка состояния системы с помощью функций Heap32ListFirst() и Heap32ListNext () значения соответствующих полей.
Обращение к функциям имеет вид:
Heap32ListFirst (hSnapshot, LPHEAPLIST32);
Heap32ListNext (hSnapshot, LPHEAPLIST32).
Первый аргумент - хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).
Второй аргумент - структура, содержащая 4 поля:
dwSize : DWORD - размер кучи
th32ProcessID : DWORD - идентификатор процесса, владеющего кучей
th32HeapID : DWORD - идентификатор кучи
dwFlags : DWORD - тип кучи