Программа, выдающая полную информацию о наличии портов, частоте процессора, оперативной памяти, системного каталога, каталога Windows

КУРСОВОЙ ПРОЕКТ



"Программа выдающая полную информацию о наличии портов, частоте процессора, оперативной памяти, системного каталога, каталога Windows"























2010 г.


Введение



	Системное программное обеспечение предназначено для управления работой компьютера, распределения его ресурсов, поддержки диалога с пользователями, оказания им помощи в обслуживании компьютера, а также для частичной автоматизации разработки новых программ.

Программы, работающие на компьютере можно разделить на несколько категорий:

		прикладные программы, непосредственно обеспечивающие выполнение необходимых пользователям работ: редактирование текстов, рисование картинок, обработка информационных массивов.

		Инструментальные системы (системы программирования, обеспечивающие создание новых программ на компьютере).

		Системные программы, выполняющие различные вспомогательные функции, например, создание копий используемой информации, выдачу справочной информации о компьютере, проверка работоспособности устройств компьютера.

Таким образом, программное обеспечение – это совокупность программ и правил со всей относящейся к ним документацией, позволяющих использовать вычислительную машину для разрешения различных задач. Системное программное обеспечение – это комплекс программных модулей, многие из которых поставляются одновременно с компьютером. [1]

По окончанию курса «Системное программное обеспечение» стоит задача в закреплении навыков программирования и создании программных продуктов. Она состоит в написании прикладной программы для просмотра скрытых и системных файлов.

В процессе данной работы необходимо научиться создавать программы с необходимой функциональностью, а также с удобным пользователю интерфейсом. Для реализации был выбран язык C# с использованием классов.NET и Windows Forms, среда разработки Visual Studio 2010.


1. Windows Management Instrumentation – инструментарий управления Windows



Windows Management Instrumentation (WMI) в дословном переводе – это инструментарий управления Windows. Если говорить более развернуто, то WMI – это одна из базовых технологий для централизованного управления и слежения за работой различных частей компьютерной инфраструктуры под управлением платформы Windows. Технология WMI – это расширенная и адаптированная под Windows реализация стандарта WBEM, принятого многими компаниями, в основе которого лежит идея создания универсального интерфейса мониторинга и управления различными системами и компонентами распределенной информационной среды предприятия с использованием объектно-ориентированных идеологий и протоколов HTML и XML.

В основе структуры данных в WBEM лежит Common Information Model (CIM), реализующая объектно-ориентированный подход к представлению компонентов системы. CIM является расширяемой моделью, что позволяет программам, системам и драйверам добавлять в нее свои классы, объекты, методы и свойства.

WMI, основанный на CIM, также является открытой унифицированной системой интерфейсов доступа к любым параметрам операционной системы, устройствам и приложениям, которые функционируют в ней.

Важной особенностью WMI является то, что хранящиеся в нем объекты соответствуют динамическим ресурсам, то есть параметры этих ресурсов постоянно меняются, поэтому параметры таких объектов не хранятся постоянно, а создаются по запросу потребителя данных. Хранилище свойств объектов WMI называется репозиторием и расположено в системной папке операционной системы Windows: %SystemRoot%\System32\WBEM\Repository\FS.


1.1 Классы, события и безопасность WMI



Так как WMI построен по объектно-ориентированному принципу, то все данные операционной системы представлены в виде объектов и их свойств и методов.

Все классы группируются в пространства имен, которые иерархически упорядочены и логически связаны друг с другом по определенной технологии или области управления. В WMI имеется одно корневое пространство имен Root, которое в свою очередь имеет 4 подпространства: CIMv2, Default, Secutiry и WMI.

Классы имеют свойства и методы и находятся в иерархической зависимости друг от друга, то есть классы-потомки могут наследовать или переопределять свойства классов-родителей, а также добавлять свои свойства.

Свойства классов используются для однозначной идентификации экземпляра класса и для описания состояния используемого ресурса. Обычно все свойства классов доступны только для чтения, хотя некоторые из них можно модифицировать определенным методом. Методы классов позволяют выполнить действия над управляемым ресурсом.

Каждому экземпляру класса можно обратиться по полному пути, который имеет следующую структуру:



[\\ComputerName\NameSpace] [:ClassName] [.KeyProperty1=Value1] [, KeyProperty2=Value2]…]



где

ComputerName – имя компьютера

NameSpace – название пространства имен

ClassName – имя класса

KeyProperty1=Value1, KeyProperty2=Value2 – свойства объекта и значения, по которым он идентифицируется.

Пример обращения к процессу с именем «Calc.exe», который запущен на локальной машине: \\.\CIMv2: Win32_Process. Name= «Calc.exe».

Экземпляры классов могут генерировать события, к которым можно подписываться. При наступлении события WMI автоматически создает экземпляр того класса, которому соответствует это событие. Такой механизм удобно использовать для выполнения определенной команды при наступлении определенного события, то есть следить за состоянием объектов операционной системы.

Общая безопасность в WMI реализуется на уровне операционной системы, а дополнительная политика безопасности основана на уровнях пространств имен и протокола DCOM. То есть если пользователь не имеет права делать какое-то действие через операционную систему, он не сможет это сделать и через WMI. Если же пользователю дано какое-то право в операционной системе, то это еще не означает, что это право будет и в WMI, так как в WMI действуют дополнительные параметры безопасности на уровне пространств имен.

Каждый объект операционной системы имеет свое описание безопасности (SD) со своим списком доступа (ACL), в котором перечислены идентификаторы пользователей (SID) и их привилегии. Каждое пространство имен может иметь собственное SD со своим ACL, где пользователям могут быть назначены разрешения на чтение данных, выполнение методов, запись классов и данных и другие. Данные о дополнительных разрешениях хранятся в репозитории WMI. Отдельные классы из пространств имен не имеют собственных описаний безопасности, они наследуют их от своего пространства имен.

По умолчанию администратор компьютера имеет полные права на использование WMI, а остальные пользователи могут лишь вызывать методы, считывать данные и записывать в репозиторий экземпляры классов провайдеров WMI.

Для доступа к инфраструктуре WMI используется протокол DCOM, через который пользователь подключается к WMI. Чтобы определить, какие права будут у подключившегося пользователя, используется механизмы олицетворения и аутентификации протокола DCOM.

Уровни олицетворения могут принимать следующие значения: Anonymous	Анонимный	WMI-объект не может получить информацию о пользователе – доступ по такому типу не предоставляется

Identify	Идентификация	WMI-объект запрашивает маркер доступа пользователя – доступ предоставляется только локально

Impersonate	Олицетворение	WMI-объект имеет такие же права, какие имеет пользователь – рекомендуемый уровень для выполнения команд на удаленном компьютере

Delegate	Делегирование	WMI-объект может обратиться от имени пользователя к другому WMI-объекту – нерекомендуемый уровень, так как команды можно выполнять удаленно через цепочку из нескольких компьютеров

Уровни аутентификации (подлинности) могут принимать следующие значения: None	Отсутствует	Проверка подлинности отсутствует

Default	По умолчанию	Стандартные настройки безопасности, которые задаются компьютером-целью команды

Connect	Подключение	Проверка только во время подключения к компьютеру-цели команды, проверка в ходе работы отсутствует

Call	Вызов	Проверка подлинности при каждом запросе к компьютеру-цели команды, заголовки пакетов подписываются, но содержимое не шифруется

Pkt	Пакет	Проверка подлинности всех пакетов к компьютеру-цели команды, заголовки пакетов подписываются, но содержимое не шифруется

PktIntegrity	Целостность пакета	Проверка подлинности и целостности всех пакетов к компьютеру-цели команды, заголовки пакетов подписываются, но содержимое не шифруется

PktPrivacy	Секретность пакета	Проверка подлинности и целостности всех пакетов к компьютеру-цели команды, заголовки и содержимое пакетов подписываются и шифруются



1.2 Средства работы с WMI



– wmimgmt.msc – оснастка консоли управления MMC для настройки WMI на локальном компьютере.

– winmgmt.exe – консольная утилита управления WMI локального компьютера.

– wbemtest.exe – графическая утилита для взаимодействия со структурой WMI на локальном или удаленном компьютере.

– wmic.exe – консольная утилита для взаимодействия со структурой WMI на локальном компьютере.

– mofcomp.exe – компилятор MOF-файлов для расширения структуры WMI, управления библиотекой классов WMI и восстановления репозитория.



1.3 Язык запросов WMI



Для обращения к объектам WMI используется специфический язык запросов WMI Query Language (WQL), который является одним из разновидностей SQL. Основное его отличие от ANSI SQL – это невозможность изменения данных, то есть с помощью WQL возможна лишь выборка данных с помощью команды SELECT. Помимо ограничений на работу с объектами, WQL не поддерживает такие операторы как DISTINCT, JOIN, ORDER, GROUP, математические функции. Конструкции IS и NOT IS применяются только в сочетании с константой NULL.

Запросы WQL обычно применяются в скриптах, но их также можно протестировать в программе Wbemtest и в консольной утилите Wmic (утилита wmic не требует написания ключевого слова SELECT и полей выборки).



1.4 Подключение к WMI



В скриптах для подключения к WMI используются два метода: с использованием локатора (SWbemLocator) и с использованием моникера (WinMgmts). Метод локатора позволяет установить соединие с пространством имен от имени определенной учетной записи. Метод моникера разрешает подключаться к WMI только от имени текущей учетной записи.

Подключение методом локатора

Использование этого метода необходимо, когда в сценарии нужно явно задать имя и пароль учетной записи для подключения к 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();

 // создаем экземпляр для обращения к wmif

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.

В процессе разработки компьютерной программы получены навыки постановки задачи для решения ее программным способом, выбора и разработки соответствующих алгоритмов, составления, отладки и тестирования программы в рамках примененной технологии программирования, использования справочной литературы при изучении новых программных продуктов, закрепления практических навыков в оформлении документации на каждом этапе разработки.

В частности, были решены задачи корректной работы приложения, правильного выведения необходимой информации на экран.

Можно сказать, что поставленное при курсовом проектировании задание было реализовано полностью.

Недостатками результирующего программного средства являются:

– недостаточная гармоничность и привлекательность графической составляющей проекта;

– небольшие задержки при выполнении приложения на компьютерах с малым объемом оперативной памяти;

Данные недостатки могли бы быть исправлены при наличии более широких знаний и навыков решения задач подобного рода.






Список источников



			Виталий Бочкарёв. Администрирование с помощью WMI, http://www.sysengineering.ru, 26.04.2010.

	Чарльз Петцольд, Программирование с использованием Microsoft Windows Forms. – Питер: Русская Редакция, 2006. – 432 с.

	Нейгел, Ивьен, Глинн, Уотсон, Скиннер C# 2008 и платформа .NET 3.5 для профессионалов. – М.: WMPEC 2008. – 1392 c.