
- •Введение
- •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.3. Получение информации о файловой системе
1.3.1. Определение имеющихся логических дисков
Функция GetLogicalDrivers () : Dword возвращает 32-х битовое значение, каждый бит которого указывает, существует ли соответствующее логическое устройство. Бит 0 - диск А, бит 1 - диск B ….. бит 25 - диск Z.
1.3.2. Получение информации о томах
1. Функция GetVolumeInformation возвращает информацию, специфичную для файловой системы, связанной с каталогом, указанным первым параметром функции. Остальные параметры - указатели на буферы и переменные типа Dword.
GetVolumeInformation (
lpRootPathName : Pchar, // имя заданного каталога
lpVolumeNameBuffer : Pchar, // возвращаемое имя тома
nVolumeNameSize : Dword, // максимальный размер имени тома в символах. Должен быть задан при вызове функции
lpVolumeSerialNumber : pDword, // серийный номер тома - возвращаемое значение
lpMaximumComponentLenght : Dword, // максимальное количество символов, допустимое в именах файлов и каталогов
lpFileSystemFlags : Dword, // возвращаемая информация о возможностях //файловой системы
lpFileSystemNameBuffer : pChar, // указатель на буфер с названием файловой системы
nFileSystemNameSize : Dword ); // размер этого буфера в символах. Должен быть задан при вызове функции
Заметьте, что указатели на возвращаемые значения должны быть перед вызовом функции инициализированы (например, с помощью процедуры GetMem ).
Рекомендуется проверять возвращаемое функцией GetVolumeInformation значение. При возврате сообщения об ошибке следует проверить правильность задания входных параметров.
2. Функция GetDriveType возвращает информацию о типе указанного логического тома.
GetDriveType (lpRootPathName : PChar) // аргумент - имя заданного тома
3. Функция GetDiskFreeSpace возвращает статистику о дисковом пространстве на указанном логическом разделе.
GetDiskFreeSpace (
lpRootPathName : Pchar, // имя заданного логического раздела
SectorPerCluster : Dword,
BytesPerSector : Dword,
FreeClusters : Dword,
Clusters : Dword);
4. Функция GetDiskFreeSpaceEx возвращает статистику о дисковом пространстве на указанном логическом разделе большого размера.
GetDiskFreeSpaceEx (
lpRootPathName : Pchar, // имя заданного логического раздела
lpFreeBytesAvailableToCaller,
lpTotalNumberOfBytes, // общее число байт – объем раздела
lpTotalNumberOfFreeBytes : int64 // общее число свободных байтов раздела)
Пример 4 использования функций GetLogicalDrives и GetDriveType для получения списка имен разделов винчестера локального компьютера.
var
gg : DWORD;
i, m : integer;
Std : string;
begin
gg := GetLogicalDrives;
ListBox1.Clear;
m := 4;
Std := ‘ABCDEFGHIJKLMN’;
for I := 3 to 14 do
if (m and gg) <> 0 then
begin
if GetDriveType (Pchar (std[i]+’:\’)) =DRIVE_FIXED then
listbox1.Items.add (std[i]);
end;
m := 2 * m;
end;
1.3.3. Поиск файлов
Для организации поиска и отбора файлов применяются специальные процедуры, а также структура, в которой сохраняются результаты поиска - запись
type
TFileName = string;
TSearchRec = record
Time: Integer; { Время и дата создания}
Size: Integer {Размер файла }
Attr: Integer; {Параметры файла}
Name: TFileName; {Полное имя файла}
ExcludeAttr: Integer; {Не используется}
FindHandle: THandle; {Дескриптор файла}
FindData: TWin32FindData; {Не используется}
end ;
обеспечивает хранение характеристик файла. Дата и время создания файла хранятся в формате MS-DOS.
Свойство Attr может содержать комбинацию следующих флагов-значений:
faReadOniy — только для чтения;
faHidden — скрытый;
faSysFile — системный;
faVolumeID — метка тома;
faDirectory — каталог;
faArchive — архивный;
faAnyFile — любой.
Для определения параметров файла служит оператор and:
if (SearchRec.Attr AND faReadOnly) > 0 then ShowMessage ('Файл только для чтения');
Непосредственно для поиска файлов используются функции FindFirst и FindNext. Функция function FindFirst (const Path: string; Attr: Integer; var F: TSearchRec): Integer; находит первый файл, заданный полным маршрутом Path и параметрами Attr. Если заданный файл найден, функция возвращает 0, иначе — код ошибки Windows. Параметры найденного файла возвращаются в записи F типа TSearchRec.
Функция function FindNext(var F: TSearchRec): Integer;
служит для повторного поиска следующего файла, удовлетворяющего критерию поиска. При этом учитываются те параметры поиска, которые заданы последним вызовом функции FindFirst. В случае удачного поиска возвращается 0.
Для освобождения ресурсов, выделенных для выполнения поиска, применяется функция:
procedure FindClose(var F: TSearchRec);
В качестве примера организации поиска файлов рассмотрим фрагмент кода для вывода списка имен файлов (и подкаталогов), хранящихся в заданном каталоге и его подкаталогах.
procedure FilesSearch (path, name: string);
var
sr : TSearchRec;
begin
// Ищем все файлы, соответствующие маске в заданном каталоге
if FindFirst(path + '\*.' + name + '*', faAnyFile, sr) = 0 then
begin
repeat
if sr.Name[1] <>'.' then Form1.ListBox1.Items.Add (sr.Name);
until FindNext(sr) <> 0;
FindClose(sr);
end;
// Ищем все директории в текущем каталоге
if FindFirst (path + '\*', faDirectory, sr) = 0 then
begin
repeat
if sr.Name[1] <> '.' then FilesSearch (path + '\' + sr.Name, name);
until FindNext(sr) <> 0;
FindClose(sr);
end;