Міністерство освіти і науки україни
Національний Університет «Львівська Політехніка»
Кафедра ЕОМ
КУРСОВА РОБОТА
з предмету “ Системне програмне забезпечення ”
на тему:
“Програма для моніторингу використання ресурсів ОС”
Львів 2017
АНОТАЦІЯ
В курсовому проекті була розроблена «утиліта перегляду Системної інформації», вона дозволяє переглядати інформацію про BIOS, інформацію про процесор, пам’ять, диски, мережу, звук і відео, а також дані про операційну систему і її складові, а також про встановлення користувацькі програми.
Програма була розроблена за допомогою Visual Studio 2013 і працює на базі платформи .NET з використанням WinApi функцій.
ABSTRACT
In the course project was designed "view system information utility", it allows you to view information about the BIOS, information on CPU, memory, disk, network, sound, video, and data on the operating system and its components, as well as custom installation program.
The program was developed using Visual Studio 2013 and is based on .NET platform using WinApi functions.ЗМІСТ
Вступ………………………………………………………………………………….5
Огляд методів отримання інформації про систему в Windows ……………….7
Вибір технології програмування…………………………………………….....9
Огляд програм-аналогів………………………………………………………...11
Everest……………………………………………………………………….11
Розробка утиліти інформації про систему ……………………………………14
Розробка вузла побудови дерева апаратних засобів…….…………….....15
Розробка вузла побудови дерева програмних засобі.………….…………16
Розробка вузла отримання інформацій про апаратні засоби.……………17
Розробка вузла отримання інформацій про компоненти ОС….……........19
Опис інтерфейсу та інструкції користувача. ……………………………........21
Тестування……………………………………………………………………….23
Виявлення помилок побудови дерева апаратних і програмних засобів...23
Виявлення помилок відображення інформації про апаратні засоби…….24
Виявлення помилок відображення інформації про програмні засоби ….24
Висновок ………………………………………………………………………….25
Список літератури…………………………………………………………………26
Додатки……………………………………………………………………………...27
Завдання на курсову роботу
Розробити програму моніторингу апаратних і програмних засобів з можливістю:
Переглядати інформації про BIOS
Переглядати інформації про процесор
Перегляд інформації про диски
Перегляд інформації про мережу і медіа засоби
Перегляд інформації про операційну систему
Перегляді інформації про встановленні додатки.
Програма повинна використовувати стандартні бібліотеки класів платформи .NET і WinApi функції.
Вступ
Інформаційні технології передбачають використання комп'ютерів та комп'ютерних технологій обробки даних. В свою чергу, комп'ютерні технології вимагають обов'язкової наявності двох складових - апартних засобів і програмного забезпечення.
Розглянемо спочатку апаратні засоби.
До основних апаратних засобів інформаційних технологій передусім відносяться електронно-обчислювальні машини (ЕОМ) різних типів.
Номенклатура ЕОМ сьогодні дуже велика: машини поділяють за призначенням, потужністю, розмірами, елементною базою, стійкістю до впливу несприятливих умов тощо. При виборі обчислювальної техніки для використання на робочих місцях в органах державного управління та місцевого самоврядування найважливішими є продуктивність та масо-габаритні характеристики.
Базовий комплект персонального комп'ютера складається з процесорного блоку, монітора, клавіатури і миші.
Основні характеристики компонентів процесорного блоку (конфігурацію), від яких залежить продуктивність комп'ютера і його здатність використовувати різні комп'ютерні технології обробки даних, наведено в табл.1. Там же ж наведено усереднені значення цих характеристик для серійних персональних комп'ютерів.
Комп'ютерна техніка розвивається швидко, значення характеристик компонентів процесорного блоку постійно змінюються в сторону їх збільшення.
Взаємодія користувача з комп'ютером відбувається з використанням монітора, клавіатури і миші.
На монітор виводиться інформація про результати роботи комп'ютера, а також інформація про дані, які користувач уводить в комп'ютер. Монітори характеризуються типом та розміром екрана.
Найпоширенішими зараз є монітори на кольорових електронно-променевих трубках з розміром діагоналі 15" - 21". Стандартний ряд розмірів діагоналі екрана монітора має наступний вигляд: 15", 17", 19", 21".
Бувають монітори як менших (14", 11"), так і більших розмірів (22", 25"). Для використання в офісі при відстані очей користувача від екрана в межах 60 - 90 см. цілком достатньо монітора з розміром діагоналі екрана 15". Для використання окремих комп'ютерних технологій (графічні редактори, видавничі системи, геоінформаційні системи), пов'язаних з обробкою графічної інформації, використовують монітори з розміром діагоналі екрана 21". Для спеціальних робіт використовують монітори, довша сторона екранів яких розташована вертикально.
Рідкокристалічні панелі випускаються таких самих розмірів, що й монітори на електронно-променевих трубках.
Із початком використання рідкокристалічних панелей відновилось використання горизонтально розташованих корпусів процесорних блоків, причому панель встановлюється на блок зверху. Це дозволяє зекономити місце на робочому столі і спростити обслуговування процесорного блоку у випадку необхідності його розбирання.
Усі основні компоненти в процесорному блоці змонтовані на материнській платі: процесор з вентилятором охолодження, блоки оперативної пам'яті, відеокарта (плата для підімкнення монітора), звукова карта. Останнім часом спостерігається тенденція до інтегрування відео- та аудіокарт у материнську плату. Окремо в спеціальному контейнері встановлюється жорсткий диск (диски).
Крім цього, всередині процесорного блоку знаходяться: блок живлення, дисководи для компакт-дисків (CD) та гнучких дисків (FD). Там же ж знаходиться системний гучномовець.
Клавіатура і миша - два пристрої для уведення даних і команд в комп'ютер.
.
Огляд методів отримання інформації про систему в Windows.
Програма надає важливу інформацію, яка дає можливість отримати повне уявлення про стан вашого комп’вютера.
Щоб запустити програму, виберіть команду Пуск>> Всі програми>> Стандартні>> Службові>> Відомості про систему.
Вікно програми Відомості про систему (рис.1) містить дві панелі. На лівій панелі наведено список категорій, які можна розкрити, клацнувши на значку "+". На правій панелі відображається інформація, відповідна вибраної категорії. Спільним є категорія Відомості про систему, завдяки якій можна дізнатися про робочій тактовій частоті процесора, фізичному обсязі оперативної пам'яті, версії набору мікросхем на системній платі, версії встановленої BIOS, обсязі пам'яті файлу підкачки і т.п.
Важливі відомості про встановлені апаратних засобах відображають категорії Компоненти та Ресурси апаратури, а з особливостями програмного забезпечення можна ознайомитись, вибравши категорії Програмне середовище, Установки браузера та Програми Office.
У категорію Ресурси апаратури входять не тільки компоненти технології Plug and Play, але також елементи, які не підтримують цю технологію. Всі ці пристрої, що настроюються вручну або мають ресурси, які задає користувач, а не операційна система, включені в підкатегорію Обладнання зі зворотним зв'язком.
Важливою особливістю програми Відомості про систему є постійний збір і відображення даних про конфігурацію системи як для локальних, так і для віддалених комп'ютерів. У їх число входить інформація про конфігурацію устаткування, компонентах ПК, програмне забезпечення, зокрема про підписаних і непідписаних драйверів. Свіжа інформація, зібрана про компоненти ПК, може виявитися корисною при усуненні неполадок, пов'язаних з конфігурацією системи.
Зібрані про систему дані зберігаються у файлах формату. Nfо. Крім того, програма працює з файлами форматів. Cab і. Xml. Вміст відкритого файлу. Cab можна переглядати засобами меню Сервіс.
Найбільшу допомогу при виявленні та усуненні помилок системи надають такі елементи програми Відомості про систему.
Категорія Компоненти містить підкатегорію Пристрої з неполадками, завдяки якій можна вивести перелік несправних (відключених) пристроїв та коди помилок.
Елементи категорії Програмне середовище ознайомлять вас з програмами, завантажуваними автоматично. У підкатегорії Повідомлення про помилки Windows ви знайдете повідомлення про те, які програми в який час "зависали", приводили до помилок або давали збої. На праву панель виводяться дані про несправності. Ця інформація зберігається в журналі подій, який можна переглянути за допомогою вікна консолі Перегляд подій, доступною з папки Адміністрування, розташованої, в свою чергу, на панелі управління.
2.Вибір технології програмування
Синтаксис C # дуже виразний, але простий у вивченні. Усі, хто знайомий з мовами C, C + + або Java з легкістю дізнаються синтаксис з фігурними дужками, характерний для мови C #. Розробники, які знають будь-який з цих мов, як правило, зможуть добитися ефективної роботи з мовою C # за дуже короткий час. Синтаксис C # робить простіше те, що було складно в C + +, і забезпечує потужні можливості, такі як типи значень Nullable, перерахування, делегати, лямбда-вирази і прямий доступ до пам'яті, чого немає в Java. C # підтримує універсальні методи і типи, забезпечуючи більш високий рівень безпеки і продуктивності, а також ітератори, що дозволяють при реалізації колекцій класів визначати власну поведінку ітерації, яке може легко використовуватися в клієнтському коді. Вирази LINQ (Language-Integrated Query) роблять суворо типізований запит дуже зручною мовної конструкцією.
Як об'єктно-орієнтована мова, C # підтримує поняття інкапсуляції, успадкування та поліморфізму -. Всі змінні і методи, включаючи метод Головна точку входу до програми - визначення класів. Клас інкапсулюються може успадковувати безпосередньо з одного родового класу, але може реалізовувати будь-яке число інтерфейсів. У Для , які перевизначають віртуальні методи в батьківському класі, необхідно ключове слово перевизначити, щоб виключити випадкове повторне визначення. методів У мові C # структура схожа на полегшений клас: це тип, що розподіляється по стопках, який реалізує інтерфейси, але не підтримує спадкування.
На додаток до основних описаним об'єктно-орієнтованим принципам, мова C # спрощує розробку компонентів програмного забезпечення завдяки кільком інноваційним конструкціям мови, до числа яких входять наступні:
Інкапсульовані сигнатури методів, звані делегатами, які підтримують тіпобезопасние повідомлення про події.
Властивості, що виступають в ролі методів доступу для закритих змінних-членів.
Атрибути з декларативними метаданими про типи під час виконання.
Вбудовані коментарі XML-документації.
LINQ (Language-Integrated Query), що пропонує вбудовані можливості запитів у різних джерелах даних.
Якщо буде потрібно забезпечити взаємодію з іншим програмним забезпеченням Windows, таким як об'єкти COM або власні бібліотеки DLL Win32, в мові C # можна використовувати процес, який називається "взаємодії". Процес взаємодії дозволяє програмам на C # виконувати практично будь-які дії, які може виконувати вихідне додаток на C + +. Мова C # підтримує навіть покажчики і поняття "небезпечного" коду для тих випадків, коли прямий доступ до пам'яті має вкрай важливе значення.
Процес побудови C # в порівнянні з C і C + + простий і є більш гнучким, ніж в Java. Немає окремих файлів заголовка, а методи і типи не потрібно оголошувати в певному порядку. У вихідному файлі C #, може бути визначено будь-яке число класів, структур, інтерфейсів і подій.
Наступні ресурси по мові C # є додатковими:
Загальне введення в мову див. у розділі 1 розділу Специфікація мови C # .
Докладні відомості про конкретні поняттях мови C # містяться У розділі Довідник За C # .
Додаткові відомості про LINQ див. в розділі LINQ .
Останні статті та ресурси, підготовлені групою Visual C #, доступні У Центрі розробників Visual C # .
3. Огляд програм-аналогів
2.1 Everest
Першим пунктом нам пропонується дізнатися всю інформацію про наш комп'ютері. І першим пунктом нам пропонується переглянути сумарну інформацію. Тут ми зможемо дізнатися ім'я комп'ютера і вхід в домен, тип комп'ютера і пакет оновлення, ім'я користувача, тип ОС, версію браузера Internet Explorer і DirectX. Далі йде інформація про системну плату, дисплеї, пристроях мультимедіа і засоби зберігання даних. Так само можна дізнатися про розділи свого жорсткого диска. У розділі "Мережа", ми дізнаємося інформацію про мережевий адаптер, модемі. А так само можемо побачити свій первинний MAC, IP адреси. Далі нашій увазі постає інформація про периферійні пристрої та MI, перше в поясненні не потребує, а от другий пункт несе в собі інформацію про виробника системи DMI, постачальника BIOS, тип шасі та іншої інформації. Останнім пунктом нам пропонується дізнатися проблеми і поради, про машину, які нам дає програма. Тепер перейдемо до розділу Ovelock. Тут міститься вся інформація про залізо комп'ютера. У режимі реального часу ми можемо подивитися властивості ЦП, дізнатися його частоту, переглянути кеш ЦП. Далі йдуть дані про властивості системної плати, набору мікросхем (чипсета). Розділ "SPD модулі пам'яті" розповідає нам про всі лінійки пам'яті, встановлені на машині користувача. Переходимо до властивостей BIOS і графічного процесора. Тут ми можемо дізнатися про дату системної BIOS і частоті Графічного процесора, а так же частоті пам'яті.
Наступний розділ нам розповідає про те, який тип живлення використовує комп'ютер.
Далі розділ з назвою "Датчик". Тут ми дізнаємося про тип датчика, який містить різноманітні параметри комп'ютера. Більш корисним для користувача виявиться відображення в реальному часі таких параметрів як "Температури", "Вентилятори" і "Вольтаж". Перший параметр дозволяє побачити температуру Системної плати та Центрального Процесора. Далі йде інформація про швидкість обертання вентиляторів і докладна інформація про напругу.
ЦП. Тут ми спочатку дізнаємося про властивості Центрального процесора. Нам розповідають про тип процесора, його псевдонім, ступеня, наборі інструкцій, а також інформація про різні види кешу. Далі фізична інформація про ЦП. Тут ми дізнаємося про тип корпусу, його розміри, зокрема транзисторів, тех. процесі та розмір кристала. Нижче йдуть дані про вольтажі: напруга живлення ядра, напруга , типова потужність і максимальна потужність.
CPUID. У цьому розділі нам розповідають про виробника процесора, його імені і версії, а так само виводиться список того, що процесор підтримує або навпаки.
Системна плата.
Тут розповідається про властивості системної плати, спочатку нам пропонується довідатися її ID і назву. Далі йдуть властивості шини FBS. Тип шини, її ширина, реальна частота, ефективна частота, пропускна здатність - ось ті параметри, які нам пропонується дізнатися. Тепер ми звертаємо свою увагу на властивості шини пам'яті. Наступним пунктом йде властивості шини чіпсета, далі - фізична інформація про системну плату та інформація про виробника.
Пам'ять. У цьому розділі зібрана інформація про фізичну пам'яті комп'ютера. Інформація про те, скільки пам'яті всього, скільки зайнято і вільно, як вона завантажена. Потім йде інформація про місця, що займає на жорсткому диску під файл підкачки і віртуальну пам'ять.
SPD. Тут міститься інформація про оперативну пам’ять, її серійний номер, ім'я модуля, його розмір, тип, тип пам'яті, ширину модуля, вольтаж, частоту регенерації, а так само чи підтримує пам'ять будь-який метод виявлення помилок. Потім іде інформація про таймінгах пам'яті і функції модуля пам'яті.
Чіпсет. Тут розповідається про північний і південний міст. Почну з опису Північного мосту.
Північний Міст.
Першим пунктом ми дізнаємося про властивості північного мосту. Потім йде звіт по таймінги пам'яті, з параметрами: CAS Latency (CL), RAS To CAS Delay (tRCD), RAS Precharge (tRP), RAS Active Time (tRAS). Далі йде інформація про роз'єми пам'яті, тобто тут ми можемо побачити, скільки пам'яті приходиться на кожну лінійку. Потім відображається інформація про контролері AGP. Інформація про виробника та різні поради щодо вирішення існуючих проблем.
Південний міст.
Нам розповідають про його версією, тип корпусу, його розміри, технологічному процесі, напрузі живлення ядра. Наступним пунктом йде інформація про Аудіоконтролер, а потім про виробника чіпсета.
BIOS. Тип, версія, виробник, поради.
Операційна Система.
Перший підрозділ в даній категорії називається, аналогічно - "Операційна Система". Далі йде інформація про мову операційної системи, тип ядра і її версії. Далі йдуть дані про пакет оновлення, тобто сервіс паку. Так само можна дізнатися в який каталог, і на який диск ця система була встановлена. Потім нам пропонується зареєстрований користувач, організація, ID і ключ продукту. Разом з усім цим йде інформація про ліцензовані процесори, а також про те підтримується чи ні активація продукту через WPA.
4. Розробка утиліти інформації про систему
Дана програма має такі основні функціональні вузли:
- Побудова дерева апаратних засобів.
- Отримання інформації про апаратні засоби.
- Побудова дерева програмних засобів
- Отримання інформації про компоненти операційної системи
Вузол «Побудови дерева апаратних засобів» повинен отримувати список всіх апаратних засобів ПК, будувати з даного списку дерево з можливістю доступу до кожної гілки.
Вузол «Побудова дерева програмних засобів» повинен отримувати список всіх компонентів операційної системи і будувати з даного списку дерево з можливістю доступу до кожної гілки.
Вузол «Отримання інформації про апаратні засоби» повинен надавати можливість вибору користувачу апаратні засоби інформацію про які він хоче отримувати, звертатись до драйвера вибраного пристрою і отримувати інформацію про основні його характеристики.
Вузол «Отримання інформації про компоненти операційної системи» повинен надавати можливість вибору користувачу компоненти ОС інформацію про які він хоче отримати, звертатись через системні виклики до ядра і отримувати дані про стан компонента.
4.1. Розробка вузла побудови дерева апаратних засобі.
Даний вузол є одним з двох допоміжних вузлів, які забезпечується зручний користувацький інтерфейс, а також призначенні суто для візуального відображення основних апаратних вузлів.
Рис 1. Граф-схема вузла
Блок 1 – Початок роботи вузла
Блок 2 – підготовка до роботи з апаратними пристроями.
Блок 3 – Перевірка чи є ще пристрої.
Блок 4 – Звернення до драйвера.
Блок 5 – Отримання назви пристрою.
Блок 6 – Додавання отриманого пристрою в список.
Блок 7 – Відображення зібраних даних для користувача у вигляді дерева.
Блок 8 – Завершення роботи вузла.
4.2. Розробка вузла побудови дерева програмних засобів.
Даний вузол є другим допоміжним вузлом і забезпечується зручний користувацький інтерфейс, а також призначений суто для візуального відображення основних програмних компонентів.
Рис 2. Граф-схема вузла
Блок 1 – Початок роботи вузла
Блок 2 – підготовка до роботи з програмними компонентами ОС.
Блок 3 – Перевірка чи є ще компонент ОС.
Блок 4 – Системний виклик.
Блок 5 – Отримання назви компоненту.
Блок 6 – Додавання отриманих даних в список.
Блок 7 – Відображення зібраних даних для користувача у вигляді дерева.
Блок 8 – Завершення роботи вузла.
4.3. Розробка вузла отримання інформацій про апаратні засоби.
Даний вузол є одним з двох основних вузлів і призначений для збирання і відображення основних параметрів апаратних засобів.
Рис. 3 Граф-схема алгоритму
Блок 1- Початок роботи вузла
Блок 2 – Вибір пристрою в дереві
Блок 3 – Наступний параметр
Блок 4 – Звернення до драйверу пристрою
Блок 5 – Отримання значення параметру
Блок 6 – відображення отриманого значення
Блок 7 – Завершення роботи вузла.
Щоб доступитись до вибраного пристрою використовується запит:
SelectQuery query = new SelectQuery("Win32_Processor");
ManagementObjectSearcher search = new ManagementObjectSearcher(query);
В даному випадку отримується інформація про процесор системи.
Аналогічні запити використовується для отримання всіх інших параметрів пристроїв.
Щоб отримати дані про дискові пристрої використовується наступний код:
DriveInfo[] allDrives = DriveInfo.GetDrives();
4.4. Розробка вузла отримання інформацій про компоненти ОС.
Даний вузол є одним з двох основних вузлів і призначений для збирання і відображення основних параметрів програмних модулів ОС.
Рис. 4 Граф-схема алгоритму
Блок 1- Початок роботи вузла
Блок 2 – Вибір програмного модуля в дереві
Блок 3 – Наступний параметр
Блок 4 – Системний виклик
Блок 5 – Отримання значення параметру
Блок 6 – відображення отриманого значення
Блок 7 – Завершення роботи вузла.
Щоб отримати значення системного часу використовується:
intTicks = System.Environment.TickCount;
Щоб отримати дані про ключ використовується код:
RegistryKey regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows NT\\CurrentVersion", false);
byte[] digitalPid = (byte[])regKey.GetValue("DigitalProductID");
Щоб отримати дані про прикладні програми викристоувється код:
Type at = typeof(AssemblyCompanyAttribute);
object[] r = myApp.Assembly.GetCustomAttributes(at, false);
AssemblyCompanyAttribute ct = (AssemblyCompanyAttribute) (r[0]);
5.Опис інтерфейсу та інструкції користувача.
Утиліту «Інформації про систему» можна запустити з виконавчого файлу SystemInformation.exe.
Рис. 5 Головне вікно програми
В програмі присутні наступні функції:
Перегляд інформації про BIOS
Перегляд інформації про CPU
Перегляд інформації про диски
Перегляд інформації про мережевий адаптер
Перегляд інформації про звукову карту
Перегляд інформації про відео карту
Перегляд інформації про системний час
Перегляд інформації про встановленні програми
Перегляд інформації про Служби
Перегляд інформації про спеціальні папки
Перегляд інформації про програми автозапуску
Перегляд інформації про облікові записи користувачів
Перегляд інформації про візуальні стилі
В лівій частині даного вік розміщено дерево пристроїв і компонентів ОС, переходячи по гілках дерева можна переглянути основні параметри вибраних елементів.
Рис. 6 Перегляд інформації про служби
В нижні частині вікна розміщений statusbar на якому відображається інформація про поточний час і час роботи ПК з останнього запуску.
Рис. 7 Час роботи ПК з останнього запуску6. Тестування
Відлагодження програми відбувається на основі спеціально створених тестів за допомогою автоматизованого відлагоджувача який присутній в середовищі Ms Visual Studio 2013, в покроковому режимі перевіряється значення потрібних змінних і вмістиме потрібних структур даних. За допомогою breakpoints відбувається запинка виконання програми в тих місцях де відбулася логічна помилка або в місцях визначених студентом.
6.1 Виявлення помилок побудови дерева апаратних і програмних засобів.
До помилок на цьому етапі відносяться помилки програмного коду, який супроводжується некоректним відображенням даних. Як видно з рисунку всі дані відображаються коректно:
Рис. 8 Вікно програми з коректно відображеними даними
6.2 Виявлення помилок відображення інформації про апаратні засоби.
До помилок на цьому етапі відносяться помилки неправильної або не коректної інформації. Ці помилки були виявлені і оброблені і інформація, про неготові пристрої не виводить, або видається повідомлення, що пристрій не готовий до роботи.
Рис. 9 Інформація про пристрої не готові до роботи
6.3. Виявлення помилок відображення інформації про програмні засоби.
До помилок на цьому етапі відносяться помилки повернення ОС некоректних даних.
Рис. 10 Вікно інформування про помилку
Висновок
Підчас створення програмного продукту я отримав навички роботи збору інформації про апаратні і програмні засоби ПК .
На початкових стадіях розробки було проведено аналіз задачі проекту та розроблено граф схеми роботи програмного продукту. Наступні етапи проектування, використовуючи загальнотеоретичні положення сформульовані на ранніх стадіях синтезу, реалізовували проект на програмному рівні.
У курсовому проекті була розроблена утиліта «Інформації про систему» з можливістю виводу інформації про апаратні засоби ПК і операційну систему Windows. Також було проведене тестування всіх модулів, яке підтвердило, що весь код який міг призвести до помилок опрацьований і дозволяє працювати програмі коректно.
Під час виконання курсового проекту було успішно засвоєно методи розробки системних програм, а зокрема програми збору інформації про систему.
Список літератури
В. Зиборов Visual C# 2010 на примерах
Системное программное обеспечение / А.В.Гордеев, А.Ю.Молчанов.
Э. Троелсен Язык программирования C# 2010 и платформа .NET 4.0
Колисниченко Секреты, настройка и оптимизация реестра Windows 7
Дж.Донован. Системное программирование.
Додаток
#region " Imported Namespaces "
using Microsoft.Win32;
using Microsoft.VisualBasic;
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Management;
using System.Text;
using System.ComponentModel;
using System.Globalization;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Windows.Forms.VisualStyles;
#endregion
namespace SystemInformation
{
public class InformationClass
{
#region " Constructor "
public InformationClass()
{
myApp = typeof(InformationClass);
}
#endregion
#region " Initialize "
/// <summary>
/// Initialize according to property setting.
/// </summary>
public void Initialize(Initializers mvarinitializers)
{
switch (mvarinitializers)
{
case Initializers.GetAll:
GetAll();
break;
case Initializers.GetBiosInfo:
GetBiosInfo();
break;
case Initializers.GetCpuInfo:
GetCpuInfo();
break;
case Initializers.GetDriveInformation:
GetDriveInformation();
break;
case Initializers.GetNetAdaptorInfo:
GetNetAdaptorInfo();
break;
case Initializers.GetNetInterfaceInfo:
GetNetInterfaceInfo();
break;
case Initializers.GetSoundInfo:
GetSoundInfo();
break;
case Initializers.GetVideoInfo:
GetVideoInfo();
break;
case Initializers.GetVolumeInfo:
GetVolumeInfo();
break;
case Initializers.GetNone:
break;
case Initializers.GetServiceInfo:
GetServiceInfo();
break;
default:
GetAll();
break;
}
}
private void GetAll()
{
GetCpuInfo();
GetBiosInfo();
GetVolumeInfo();
GetVideoInfo();
GetSoundInfo();
GetNetAdaptorInfo();
GetNetInterfaceInfo();
GetDriveInformation();
GetServiceInfo();
}
#endregion
#region " Variables, Constants, Declarations, and Enums "
#region " Class-level Variables, Constants, and Declarations "
// Class-level variables.
private ManagementObject info;
private DateTime mTempDate;
// Class-level constants.
private const string mRevision = "Revision";
private const string mUnknown = "Unknown";
private DateTime mDefaultDate = DateTime.Parse("1/1/2006");
// Used to access information from Assembly (application) Attributes.
private Type myApp;
#endregion
#region " Operating System Code HolidayName Constants "
// code names
private const string mstrChicago = "Chicago";
private const string mstrDaytona = "Daytona";
private const string mstrDetroit = "Detroit";
private const string mstrMemphis = "Memphis";
private const string mstrGeorgia = "Georgia";
private const string mstrCairo = "Cairo";
private const string mstrCairoNT5 = "Cairo/NT5";
private const string mstrWhistler = "Whistler";
private const string mstrWhistlerServer = "Whistler Server";
private const string mstrLonghorn = "Longhorn";
#endregion
#region " Local Variables for Property Values "
private string mvarAppBuild;
private string mvarAppCompanyName;
private string mvarAppCopyright;
private string mvarAppDescription;
private string mvarAppDirectory;
private int mvarAppMajorRevision;
private int mvarAppMajorVersion;
private int mvarAppMinorRevision;
private int mvarAppMinorVersion;
private string mvarAppProductName;
private string mvarAppRevision;
private string mvarAppShortVersion;
private string mvarAppTitle;
private string mvarAppTrademark;
private string mvarAppVersion;
private Collection<string> mvarBiosFeatures = new Collection<string>();
private string mvarBiosManufacturer;
private string mvarBiosName;
private string mvarBiosReleaseDate;
private bool mvarBiosSmBiosPresent;
private string mvarBiosSmBiosVersion;
private string mvarBiosVersion;
private Collection<string> mvarCDDrive = new Collection<string>();
private Collection<string> mvarCDManufacturer = new Collection<string>();
private Collection<string> mvarCDMediaSize = new Collection<string>();
private Collection<string> mvarCDModel = new Collection<string>();
private Collection<string> mvarCDRevisionLevel = new Collection<string>();
private Collection<string> mvarCDStatus = new Collection<string>();
private bool mvarCompAutomaticResetCapability;
private string mvarCompDescription;
private string mvarCompManufacturer;
private string mvarCompModel;
private string mvarCompSystemType;
private string mvarCpuAddressWidth;
private string mvarCpuDescription;
private string mvarCpuFsbSpeed;
private string mvarCpuL2CacheSize;
private string mvarCpuL2CacheSpeed;
private Collection<Int32> mvarCpuLoadPercentage = new Collection<Int32>();
private string mvarCpuManufacturer;
private string mvarCpuName;
private int mvarCpuNumberOfCores;
private int mvarCpuNumberOfLogicalProcessors;
private int mvarCpuNumberOfProcessors;
private bool mvarCpuPowerManagementSupported;
private string mvarCpuPowerManagementCapabilities;
private string mvarCpuProcessorId;
private string mvarCpuSocket;
private string mvarCpuSpeed;
private Collection<string> mvarDriveCapacity = new Collection<string>();
private Collection<string> mvarDriveInterface = new Collection<string>();
private Collection<string> mvarDriveModelNo = new Collection<string>();
private Collection<string> mvarDriveStatus = new Collection<string>();
private int mvarFrameworkMajorVersion;
private int mvarFrameworkMinorVersion;
private string mvarFrameworkServicePack;
private string mvarFrameworkShortVersion;
private string mvarFrameworkVersion;
private string mvarMainBoardManufacturer;
private string mvarMainBoardModel;
private string mvarMemAvailPhysical;
private string mvarMemAvailVirtual;
private string mvarMemTotalPhysical;
private string mvarMemTotalVirtual;
private Collection<string> mvarNetAdapterType = new Collection<string>();
private Collection<string> mvarNetAutoSense = new Collection<string>();
private Collection<string> mvarNetConnectionId = new Collection<string>();
private Collection<string> mvarNetConnectionStatus = new Collection<string>();
private Collection<string> mvarNetDefaultTtl = new Collection<string>();
private Collection<bool> mvarNetDhcpEnabled = new Collection<bool>();
private Collection<string> mvarNetDhcpLeaseExpires = new Collection<string>();
private Collection<string> mvarNetDhcpLeaseObtained = new Collection<string>();
private Collection<string> mvarNetDhcpServer = new Collection<string>();
private Collection<string> mvarNetDomain = new Collection<string>();
private Collection<string> mvarNetHostName = new Collection<string>();
private Collection<string> mvarNetIPAddress = new Collection<string>();
private Collection<bool> mvarNetIPEnabled = new Collection<bool>();
private Collection<string> mvarNetMacAddress = new Collection<string>();
private Collection<string> mvarNetManufacturer = new Collection<string>();
private Collection<string> mvarNetMaxSpeed = new Collection<string>();
private Collection<string> mvarNetMtu = new Collection<string>();
private int mvarNetNumberOfAdaptors;
private Collection<string> mvarNetProductName = new Collection<string>();
private Collection<string> mvarNetSpeed = new Collection<string>();
private Collection<string> mvarNetTcpNumConnections = new Collection<string>();
private Collection<string> mvarNetTcpWindowSize = new Collection<string>();
private string mvarOSBootupState;
private string mvarOSBuild;
private string mvarOSCodeName;
private string mvarOSDomain;
private string mvarOSFullName;
private DateTime mvarOSInstallDate;
private string mvarOSMachineName;
private int mvarOSMajorVersion;
private int mvarOSMinorVersion;
private bool mvarOSPartOfDomain;
private PlatformID mvarOSPlatform;
private string mvarOSProductID;
private string mvarOSProductKey;
private string mvarOSServicePack;
private string mvarOSShortVersion;
private string mvarOSType;
private string mvarOSUpTime;
private string mvarOSUserName;
private string mvarOSVersion;
private Collection<string> mvarServiceDisplayName = new Collection<string>();
private Collection<string> mvarServiceDescription = new Collection<string>();
private Collection<string> mvarServiceStartMode = new Collection<string>();
private Collection<string> mvarServiceState = new Collection<string>();
private Collection<string> mvarServiceStatus = new Collection<string>();
private Collection<string> mvarServicePathName = new Collection<string>();
private Collection<string> mvarSndController = new Collection<string>();
private Collection<string> mvarSndDMABufferSize = new Collection<string>();
private Collection<string> mvarSndManufacturer = new Collection<string>();
private int mvarSndNumberOfControllers;
private string mvarTimeCurrentTimeZone;
private bool mvarTimeDaylightSavingsInEffect;
private string mvarTimeDaylightSavingsName;
private int mvarTimeDaylightSavingsOffset;
private DateTime mvarTimeLocalDaylightEndDate;
private DateTime mvarTimeLocalDaylightEndTime;
private DateTime mvarTimeLocalDaylightStartDate;
private DateTime mvarTimeLocalDaylightStartTime;
private DateTime mvarTimeLocalDateTime;
private DateTime mvarTimeUniversalDateTime