- •Введение
- •1. Требования к курсовой работе
- •2. Основные этапы выполнения курсовой работы
- •3. Требования к оформлению курсовой работы
- •4. Теоретические сведения
- •4.1 Основы технологии Windows Management Instrumentation
- •4.1.1 Введение
- •4.1.2 Работа с процессами и потоками в wmi
- •4.1.3 Обработка событий в wmi
- •4.1.4 Сбор информации о памяти
- •4.1.5 Планирование заданий
- •4.1.6 Работа с файловой системой
- •4.2.1 Введение
- •4.2.2 Инициализация com
- •4.2.3 Создание подключения к пространству имен wmi
- •4.2.4 Установка уровней безопасности для wmi подключения
- •4.2.5 Реализация функциональности приложения
- •4.2.6 Очистка и корректное завершение wmi приложения
- •4.3 Основные понятия технологии ole-автоматизации
- •4.4 Примеры сценариев wsh использующих ole-автоматизацию
- •5. Задания на курсовую работу по дисциплине «Системное программное обеспечение»
- •Литература
- •Приложение а
- •Оценка ________________ Дата защиты ________________ донецк - ДонНту – 200_ Приложение б
4.1.6 Работа с файловой системой
Для работы с файловой системой в WMI существуют следующие классы:
Win32_LogicalDisk – для получения информации о логических дисках;
CIM_DataFile – для работы с файлами;
Win32_Directory – для работы с папками.
Основными свойствами класса Win32_LogicalDisk являются:
DeviceID – идентификатор логического диска;
DriveType – тип логического диска:
2 – сменный диск, 3 – жесткий диск, 4 – сетевой диск,
5 – CD-ROM, 6 – RAM диск;
FileSystem – тип файловой системы;
FreeSpace – объем доступного дискового пространства.
Основные свойства класса CIM_DataFile следующие:
CreationDate – дата и время создания файла;
Drive – диск, на котором хранится файл;
Extension – расширение;
FileName – простое имя файла без расширения;
FileSize – размер файла;
FileType – тип файла, ассоциированный с его расширением;
FSName – тип файловой системы;
LastAccessed – дата и время последнего доступа к файлу;
LastModified – дата и время последней модификации файла;
Name – полное имя файла;
Path – путь.
Для копирования, переименования и удаления файла класс CIM_DataFile содержит методы Copy(FileName), Rename(FileName), и Delete() соответственно.
Класс Win32_Directory содержит аналогичные свойства и методы, что и перечисленные выше свойства и методы класса CIM_DataFile.
4.2 Создание WMI приложений на C++
4.2.1 Введение
Создание на C++ приложений, в которых используются возможности WMI, является более сложной задачей по сравнению с использованием WMI в сценариях, написанных на скриптовых языках (VBScript или JScript). Это связано с тем, что в приложениях на C++ необходимо выполнить инициализацию COM, подключение и настройку WMI протоколов, и обеспечить корректное завершение приложения. Однако C++ имеет большую мощность и гибкость чем скриптовые языки. Таким образом, скриптовые языки предпочтительнее использовать при решении простых задач, для более серьезных приложений предпочтительнее использовать С++.
Любое WMI приложение должно содержать следующие части:
-
Инициализация COM.
-
Создание подключения к пространству имен WMI.
-
Установка уровней безопасности для WMI подключения.
-
Реализация функциональности приложения.
-
Очистка и корректное завершение WMI приложения.
Рассмотрим каждую из этих частей.
4.2.2 Инициализация com
Так как WMI базируется на технологии COM, для доступа к WMI необходимо выполнить вызовы функций CoInitializeEx и CoInitializeSecurity.
Вызов CoInitializeEx это стандартная функция для установки COM интерфейса. Следующий пример (листинг 8) показывает вызов CoInitializeEx.
Листинг 8. Пример вызова функции CoInitializeEx:
HRESULT hr;
hr = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hr))
{
cout << "Failed to initialize COM library."
<< "Error code = 0x"
<< hex << hr << endl;
return hr;
}
Функция CoInitializeSecurity вводит автоматические настройки безопасности. Эти установки применяются ко всем импортируемым и экспортируемым ссылкам на объекты, за исключением явно переопределенных с использованием дополнительных вызовов API-функций. Следующий пример (листинг 9) показывает, как выполнять вызов CoInitializeSecurity.
Листинг 9. Пример вызова функции CoInitializeSecurity:
hr = CoInitializeSecurity(
NULL, // Security descriptor
-1, // COM negotiates authentication service
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
// level for proxies
RPC_C_IMP_LEVEL_IMPERSONATE,// Default Impersonation
// level for proxies
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
// of the client or server
NULL); // Reserved
if (FAILED(hr))
{
cout << "Failed to initialize security.
<< "Error code = 0x"
<< hex << hr << endl;
CoUninitialize();
return hr; // Program has failed.
}
После инициализации COM, следующим шагом является создания подключения к пространству имен WMI.