Подключение методом локатора
Использование этого метода необходимо, когда в сценарии нужно явно задать имя и пароль учетной записи для подключения к WMI. Объект SWbemLocator создается так:
Set mSWbemLocator = CreateObject («WbemScripting.SWbemLocator»)
Подключение к репозиторию WMI производится с помощью метода ConnectServer:
mSWbemServices = mSWbemLocator. ConnectServer([ServerName], [NameSpace], [User], _
[Password], [Locate], [Authority], [SecurityFlags], [WbemNamedValueSet])
где
ServerName – имя компьютера (если не указано, то локальный компьютер),
NameSpace – пространство имен (если не указано, то пространство по умолчанию),
User – имя пользователя в формате Домен\УчетнаяЗапись (если не указано, то текущий пользователь),
Password – пароль указанного пользователя,
Locate – код локализации (если не указано, то текущий язык),
Authority – имя домена, если он не указан в параметре User (если не указано, то текущий домен),
SecurityFlags – время ожидания подключения,
WbemNamedValueSet – контекстная информация для провайдера, который используется для запроса.
Подключение методом моникера
Моникер – это строка, задающая путь к классу WMI, экземпляр которого должен быть создан. Моникер состоит из обязательного префикса «winmgmts:», необязательных настроек безопасности, необязательного пути к требуемому классу:
Set mSWbemServices = GetObject («winmgmts: [{SecurityOptions}!]\[Server]\[NameSpace]»)
Пример использования моникера:
' Подключение к пространству имен по умолчанию локального компьютера
Set mSWbemServices0 = GetObject («winmgmts:»)
' Подключение к указанному пространству имен удаленного компьютера
' с указанием метода олицетворения
Set mSWbemServices1 = GetObject («winmgmts: {impersonationLevel=Impersonate}!» & _
«\MyComputer\Root\CIMv2»)
' Подключение к указанному объекту локального компьютера
' с указанием метода олицетворения и привилегий
Set mSWbemServices2 = GetObject («winmgmts:» & _
«{impersonationLevel=Impersonate, (Shutdown, RemoteShutdown)}!» & _
«\.\Root\CIMv2: Win32Process. Handle=4»).
Указанные выше методы работают в синхронном и полусинхронном режиме, то есть программа или сценарий не выполняет следующую команду или запрос до тех пор, пока не получит ответ от текущего запущенного метода.
Асинхронное использование объектов репозитория
Аналогично синхронным методам WMI позволяет выполнять команды асинхронно, то есть не дожидаться результатов выполнения очередного запроса и продолжать работу сценария или программы. Названия таких асинхронных методов имеют окончание «Async», а работа с ними почти не отличается от обычных методов, но должны быть использованы два обязательных параметра: ссылка на специальный объект «слив событий» и контекстная информация объекта.
класс безопасность windows объект
1.5 Работа с объектами и коллекциями объектов, полученных в результате запросов
Рассмотренные выше методы возвращают объекты и коллекции объектов, которые обладают своими методами и свойствами. Коллекция объектов обладает несколькими свойствами и методами, наиболее часто используемые из них – это Count и Item.
Count – это свойство коллекции объекта, которое содержит количество элементов коллекции.
Item(mObjectPath) – это метод, который возвращает один объект коллекции, соответствующий указанному пути.
Сам объект имеет свои методы и свойства, которые соответствуют классу данного экземпляра. Но помимо классовых свойств и методов всем объектам присущи универсальные, которые оканчиваются на символ подчеркивания, чтобы отличать их от классовых. Наиболее часто используемые универсальные методы – это ExecMethod_ и Put_.
ExecMethod_(mMethod, mWbemInParamsm, mFlags, mWbemNamedValueSet) – это метод для исполнения классового метода у используемого объекта.
Put_(mFlags, mWbemNamedValueSet) – это метод для записи измененных свойств объекта в репозиторий WMI и в реальный объект.
Пример использования метода Put_:
' Подключение к пространству имен
Set mSWbemServices = GetObject («winmgmts:\.\Root\CIMv2»)
' Получение объекта логического диска
Set mDisks = mSWbemServices. ExecQuery («SELECT * FROM Win32_LogicalDisk WHERE DeviceID = 'C:'»)
' Перебор коллекции возвращенных объектов
For Each mDisk in mDisks
' Смена метки диска
oDisk. VolumeName = «System»
' Записьизменений
oDisk. Put_Next.
2. Описание реализации программы с использованием WMI
В программе на языке C# использовались классы ManagementObjectSearcher, ManagementObject, PropertyData из пространства имен System. Management.
ManagementObjectSearcher – класс извлекает коллекцию управляющих объектов в соответствии с заданным запросом. Этот класс является одной из наиболее часто используемых исходных точек входа для извлечения сведений об управлении. Например, его можно использовать для перечисления всех дисководов, сетевых адаптеров, процессов и прочих управляющих объектов в системе, либо для запроса всех работающих сетевых подключений, приостановленных служб и т.д. После создания экземпляр этого класса принимает в качестве исходных данных запрос WMI, представленный объектом ObjectQuery или его производными, и при необходимости объектом ManagementScope, представляющим пространство имен WMI, в котором должен быть выполнен запрос. Экземпляр может также принять дополнительные параметры, которые содержатся в объекте EnumerationOptions. При вызове метода Get() для этого объекта ManagementObjectSearcher выполняет данный запрос в заданной области и возвращает коллекцию управляющих объектов, которые удовлетворяют запросу, в ManagementObjectCollection.
ManagementObjectCollection – класс представляет различные коллекции управляющих объектов, извлекаемых с помощью WMI. Объекты в этой коллекции относятся к типам, производным от ManagementBaseObject, в том числе ManagementObject и ManagementClass. Коллекция может представлять собой результат WMI-запроса, выполненного с помощью ManagementObjectSearcher, или же перечисление управляющих объектов заданного типа, извлекаемых с помощью ManagementClass, представляющего этот тип. Кроме того, это может быть коллекция управляющих объектов, привязанных заданным способом к определенному управляющему объекту. В этом случае коллекция извлекается с помощью такого метода, как GetRelated().Для прохождения по коллекции можно использовать ManagementObjectCollection. ManagementObjectEnumerator, а объекты, которые содержатся в коллекции можно, в свою очередь, просматривать, а также управлять ими при выполнении различных задач управления.
Проект реализован с использованием классов Windows Forms. Основной класс frmMain
Унаследован от класса Form и представляет собой окно.
Конструктор класса производит инициализацию и заносит в список элементы, необходимые для получения информации из источников WMI.
public frmMain()
{
InitializeComponent();
this.cmbxOption. Items. AddRange (new object[] {
«Win32_OperatingSystem»,
«Win32_PhysicalMemory»,
«Win32_PortConnector»,
«Win32_Processor»});
cmbxOption. SelectedItem = «Win32_Processor»;
}
РассмотримподробнееосновнуюфункциюInsertInfo, которая заносит необходимые данные в список в удобном для пользователя формате.
// функция которая заносит необходимые данные в список в удобном для пользователя формате
private void InsertInfo (string Key, ref ListView lst, bool DontInsertNull)
{
// очищаемсписок
lst. Items. Clear();
ManagementObjectSearcher searcher = new ManagementObjectSearcher («select * from» + Key);
try
{
// searcher. Get() возвращаетколлекциюобьектов ManagementObject
// перебираемихвцикле
foreach (ManagementObject share in searcher. Get())
{
ListViewGroup grp;
try
{
// имягруппыэлементов
grp = lst. Groups. Add (share[«Name»].ToString(), share [«Name»].ToString());
}
catch
{
grp = lst. Groups. Add (share. ToString(), share. ToString());
}
// если нет элементов выдаем сообщение об ошибке
if (share. Properties. Count <= 0)
{
MessageBox. Show («No Information Available», «No Info», MessageBoxButtons.OK, MessageBoxIcon. Information);
return;
}
// переборнепосредственнозначенийсвойств
foreach (PropertyData PC in share. Properties)
{
ListViewItem item = new ListViewItem(grp);
if (lst. Items. Count% 2!= 0)
// Это просто для красоты – цвета элементов списка отличаются по цвету
item. BackColor = Color. White;
else
item. BackColor = Color. WhiteSmoke;
// заносимтекствсписок
item. Text = PC. Name;
// в зависимости от значения свойства (тоесть его типа)
// преобразуем его и заносим в ячейку списка
if (PC. Value!= null && PC. Value. ToString()!= «»)
{
switch (PC. Value. GetType().ToString())
{
case «System. String[]»:
string[] str = (string[]) PC. Value;
string str2 = «»;
foreach (string st in str)
str2 += st + «»;
item. SubItems. Add(str2);
break;
case «System.UInt16 []»:
ushort[] shortData = (ushort[]) PC. Value;
string tstr2 = «»;
foreach (ushort st in shortData)
tstr2 += st. ToString() + «»;
item. SubItems. Add(tstr2);
break;
default:
item. SubItems. Add (PC. Value. ToString());
break;
}
}
else
{
// если нечего вставлять – выводим сообщение
if (! DontInsertNull)
item. SubItems. Add («No Information available»);
else
continue;
}
// завершающая операция – добавляем сформированный элемент в список
lst. Items. Add(item);
}
}
}
catch (Exception exp)
{
MessageBox. Show («can't get data because of the followeing error \n» + exp. Message, «Error», MessageBoxButtons.OK, MessageBoxIcon. Information).
}
}
3. Примервыполненияпрограммыируководствопользователя
Цель тестирования и отладки – обнаружение, локализация и устранение дефектов в программах и данных. Тестирование программы проходило на компьютере, с установленной на него ОС Windows 7. Было проведено несколько запусков программы. Ошибок и недоработок не обнаружено.
Примеры выполнения программы:
Рисунок 3.1 – Просмотр информации о процессоре
Рисунок 3.2 – Просмотр информации о портах компьютера
Для выполнения программы необходимо запустить файл kurs.exe и выбрать из выпадающего списка, какую информацию необходимо отобразить.
Выводы
Данный курсовой проект разработан для изучения современных средств разработки приложений для операционной системы Windows.
В процессе разработки компьютерной программы получены навыки постановки задачи для решения ее программным способом, выбора и разработки соответствующих алгоритмов, составления, отладки и тестирования программы в рамках примененной технологии программирования, использования справочной литературы при изучении новых программных продуктов, закрепления практических навыков в оформлении документации на каждом этапе разработки.
В частности, были решены задачи корректной работы приложения, правильного выведения необходимой информации на экран.
Можно сказать, что поставленное при курсовом проектировании задание было реализовано полностью.
Недостатками результирующего программного средства являются:
– недостаточная гармоничность и привлекательность графической составляющей проекта;
– небольшие задержки при выполнении приложения на компьютерах с малым объемом оперативной памяти;
Данные недостатки могли бы быть исправлены при наличии более широких знаний и навыков решения задач подобного рода.
Список источников
1. Виталий Бочкарёв. Администрирование с помощью WMI, http://www.sysengineering.ru, 26.04.2010.
2. Чарльз Петцольд, Программирование с использованием Microsoft Windows Forms. – Питер: Русская Редакция, 2006. – 432 с.
3. Нейгел, Ивьен, Глинн, Уотсон, Скиннер C# 2008 и платформа .NET 3.5 для профессионалов. – М.: WMPEC 2008. – 1392 c.