Курсовая работа: Профилировщик приложений
LPVOID – адрес выходного буфера;
DWORD - длина выходного буфера;
LPDWORD – количество переданных байтов;
LPOVERLAPPED – структура, необходимая при использовании асинхронного выполнения запроса, чего нет в данном приложении.
Использование этого API-вызова полностью инкапсулировано в классе CDriver, в котором для выполнения каждого запроса реализован отдельный метод с именем, близким к названию IOCTL-запроса, что обеспечивает интуитивное понимание интерфейса этого класса.
Также этот класс инкапсулирует в себя использование Менеджера управления сервисами (SCM - Service Control Manager), с помощью которого осуществляется динамическая установка, запуск, останов и удаление драйвера.
4. Технический раздел
4.1 Выбор операционной системы и среды программирования
В качестве операционной системы была выбрана система Widows. Это обусловлено тем, что операционная система DOS уже устарела в силу многих причин (мы уже ушли от ОС, работающих в однозадачном режиме), а других операционных систем для персональных машин с хорошим интерфейсом, действительно удобных для пользователя, еще нет. Windows по прежнему остается самой распространенной ОС для ПК. Кроме того различные среды разработки программных продуктов разработаны именно под Windows:
Visual C++, Visual Basic, Borland C++ Builder, Delphi и другие.
Языком написания пользовательской программы был выбран С++. Язык С++ дает очень богатые возможности для программистов и, пожалуй является наиболее распространенным в их среде. Это очень мощный операторный язык. Кроме того, он обеспечивает достаточную свободу в написании программ, в то время как Pascal ставит очень узкие рамки, в частности, в описании переменных и не дает возможности построения сложных операторных выражений. Языком написания драйвера был выбран С. Применение этого языка обеспечивает переносимость меджу системами: максимум, что придётся сделать – это пересобрать драйвер. В качестве среды разработки была выбрана Microsoft Visual Studio .Net, поскольку она дает мощные и удобные средства не только визуальной разработки интерфейса программного продукта, но и настройки проектов, что позволяет эффективно организовать своё рабочее место.
4.2 Интерфейс
Так выглядит окно экземпляра пользовательского приложения «Профилировщик»:
В верхней части диалога находятся два ниспадающих списка, верхний из которых отображает список запущенных процессов в системе, а нижний – список потоков этого процесса. С помощью этих элементов управления можно указать приложению, за каким процессом и каким потоком этого процесса вести наблюдение.
На диалоге есть три группы:
Группа «Информация о процессе»:
ProcessID – идентификатор процесса;
ParentID – идентификатор процесса-родителя;
BasePriority – базовый приоритет по-умолчанию для потоков процесса;
ThreadCount – количество потоков процесса;
KernelTime – суммарное время, проведённое в режиме ядра потоками процесса, 1 единица равна 100 нс;
UserTime - суммарное время, проведённое в пользовательском режиме потоками процесса, 1 единица равна 100 нс.
Группа «Информация о потоке»:
ThreadID – идентификатор потока;
BasePriority – базовый приоритет потока;
Priority – приоритет потока;
ContextSwitches – количество переключений контекста, осуществлённых потоком;
KernelTime –время, проведённое в режиме ядра (1 единица равна 100 нс);
UserTime - время, проведённое в пользовательском режиме (1 единица равна 100 нс).
WaitTime – момент времени, когда поток перешёл в состояние ожидания (отсчёт ведётся от момента запуска системы).
Группа «Контекст потока»: