Для яких пристроїв потрібні драйвери. Як дізнатися, який звуковий драйвер мені потрібний

Якщо ви самостійно збирали свій комп'ютер, купуючи для нього комплектуючі окремо, то в такому разі всі драйвери для комп'ютера вже не знайти на одному єдиному сайті виробника, як це легко було б зробити при покупці готового комп'ютера (про це сказано у статті «Як знайти драйвера, якщо був куплений ноутбук чи готовий стаціонарний комп'ютер!»). Адже ви купували не готовий комп'ютер, який належав би якомусь виробнику, мав би свою модель та драйвера для якого можна було завантажити з одного сайту. Якщо комп'ютер зібраний із самостійно обраних вами запчастин, значить він вже не буде відповідати якійсь моделі та належати якомусь виробнику, тому що це вже ваше творіння:) Тому драйвера доведеться шукати окремо для всіх пристроїв, з яких було зібрано комп'ютер. Сюди ж можна віднести той випадок, коли після покупки готового (вже зібраного) комп'ютера ви за якийсь час вирішили замінити якісь «залізяки».

Зараз я покажу, як знайти всі потрібні драйвери для самостійно налаштованого комп'ютера вручну, через інтернет.

Про те, що таке драйвера розказано у статті:

Отже, ви самі підібрали всі комплектуючі, зібрали комп'ютер, встановили Windows і бачите, що драйвера встановлені не для всіх пристроїв, а може навіть не встановлені практично ні для яких. Про те, чи всі драйвера встановлені можна дізнатися зі стандартної утиліти «Диспетчер пристроїв». Як це зробити я розповідав в окремій статті.

І щоб встановити драйвера у цьому випадку є кілька варіантів.

Зверніть увагу!
Якщо у вас не встановилися автоматично навіть драйвера на мережні карти, що не дає вам можливості вийти з цього комп'ютера в інтернет, то нижче дії, що розглядаються, доведеться робити з будь-якого іншого комп'ютера, де є вихід в інтернет. А після того як драйвера все завантажуєте, потрібно буде перенести їх на потрібний комп'ютернаприклад, через флешку або диск.

Варіант №1. Пошук драйверів вручну за кодом пристроїв через сайт devid.drp.su

Цей варіант я вважаю найоптимальнішим. Спосіб є визначення коду пристрою і пошук драйверів в інтернеті за цим кодом на різних сайтах.

Припустимо, що в диспетчері пристроїв ми бачимо приблизно таку картину:

Тобто. на комп'ютер не інстальовано драйвер для кількох пристроїв. Однак визначити через диспетчер пристроїв, для яких пристроїв немає драйверів проблематично, тому що в назвах якось все розмито. Можна лише приблизно зрозуміти. Наприклад, "Ethernet-контролер" - це швидше за все мережева картадля підключення дротового інтернету. « Мережевий контролер» - це, можливо Wi-Fi адаптер, тобто. мережа для доступу до інтернету через Wi-Fi.

Але кожен пристрій має свій унікальний номер, який диспетчер пристроїв якраз може нам показати. А дізнавшись номер, ми зможемо знайти драйвер для пристрою через Інтернет.

Розглянемо пару прикладів, як знайти драйвера вручну за кодом пристроїв:

На початку я знайду драйвер для незрозумілого пристрою PCI-контролер Simple Communications.

    Визначаємо код пристрою, для якого бажаємо відшукати драйвер.

    Щоб визначити код пристрою, клацаємо по ньому в диспетчері пристроїв правою кнопкою миші і з меню вибираємо «Властивості»:

    У вікні виберіть вкладку «Відомості», а потім нижче, під написом «Властивості», виберіть «ІД обладнання»:

    В першу чергу пробуємо шукати за кодом з нижнього (4-го) рядка. Клацніть правою кнопкою нижче по 4-му рядку з кодом та виберіть «Копіювати».

    Пробуємо знайти драйвер за кодом на сайті devid.drp.su.

    Після того, як скопіювали код, відкриваємо сайт:

    Devid.drp.su

    Спробуймо знайти драйвер на ньому. Цей сайт відноситься до програми DriverPack Solution, яка збирає практично всі можливі драйвера. Тут з великою ймовірністю можна знайти драйвер для будь-якого пристрою.

    Відкривши сайт, перше, що вам потрібно зробити – вставити в найвищий довгий рядок скопійований на попередньому кроці код пристрою і видалити в цьому коді все, що йде від символу «&» і до кінця.

    Наприклад, ви копіювали код:
    PCI\VEN_8086&DEV_0166 &CC_0300

    Значить, після видалення символів від «&» у вас повинен залишитися код:
    PCI\VEN_8086&DEV_0166

    Якщо ви не знаєте, яка у вас система, відкрийте пошук Windowsі введіть там «Відомості про систему», після чого виберіть програму зі списку:

    У програмі, що відкрилася, у вікні ліворуч, виберіть «Відомості про систему» ​​і праворуч у рядку «Ім'я ОС» з'явиться версія вашої Windows (у моєму прикладі на зображенні нижче «Windows 10»), а в рядку «Тип» — розрядність: x64 або x86:

    На основі цих даних і вказуємо тип та розрядність системи на сайті devid.drp.su.

    Після того, як код пристрою вказано та версія Windows вибрана, натискаємо кнопку "Search Drivers".

    В результаті на сторінці з'явиться список драйверів, що підходять за вказаним кодом обладнання та для вашої версії Windows. За допомогою кнопки «Завантажити» завантажуємо один із драйверів на комп'ютер.

    Зверніть увагу!
    Якщо відображається кілька однакових драйверів (як на зображенні вище), завантажуйте драйвер, у якого найсвіжіша дата випуску в колонці «Версія драйвера».

    Натиснувши кнопку "Завантажити", драйвер завантажиться на ваш комп'ютер і залишиться його тільки встановити. В установці драйверів немає взагалі нічого складного і цей момент я торкнувся в окремій статті.

    Зверніть увагу!

    Буває, що у списку драйверів відображатимуться різні драйвери, наприклад:

    Це означає, що код обладнання може бути схожим на кілька пристроїв. У такому випадку ви можете просто завантажувати і пробувати встановлювати всі запропоновані варіанти, доки не встановиться потрібний драйвер.

Як бачимо, драйвер було знайти не складно. Зараз розгляну ще один приклад, щоб стало зрозуміліше:) Знайду для прикладу драйвер для пристрою, який в диспетчері пристроїв позначається як «Ethernet-контролер».

Клікаю по пристрої правою кнопкою миші, відкриваю властивості:

У вікні вибираю вкладку «Відомості», зі списку вибираю пункт «ІД обладнання» та копіюю код із 4-го рядка:

Відкриваю сайт devid.drp.su, вказую скопійований номер, видаляю в ньому все, починаючи від символу «&». Далі вибираю версію Windows та виконую пошук:

Для мого пристрою та обраної мною версії Windows відобразилася лише одна версія драйвера, яку я можу завантажити та встановити:

От і все!

Однак, все ж таки зрідка буває таке, що на сайті devid.drp.su не знайдеться драйверів за вказаним вами кодом обладнання. У такому разі є альтернативний варіант, який розглянемо нижче.

Альтернативний варіант пошуку драйверів за кодом пристрою

Якщо драйверів на відомому сайті devid.drp.su для потрібного вам пристрою не знайшлося, то можна застосувати такий простий спосіб:

    Визначаємо код пристрою. Так само копіюємо код обладнання (4-ю) строчку:

    Шукаємо драйвер на різних сайтах.

    Тепер йдемо на сайт Google.com і прямо в пошуковий рядок вставляємо скопійований код, після чого видаляємо з коду символ «&» і все, що слідує після нього, наприклад:

    PCI\VEN_8086&DEV_1C3A &СС_0780= PCI\VEN_8086&DEV_1C3A

    Натискаємо кнопку пошуку та перед нами відображається список сайтів, що підходять під наш запит:

    Тепер потрібно відкривати сайти по черзі, починаючи з першого (верхнього) і дивитися, чи можна на сайті завантажити драйвера.

    Відразу варто відзначити, що не на всіх сайтах ви знайдете потрібний драйвер, оскільки на деяких з них не буде драйвера для вашої версії Windows, а на деяких взагалі будь-яка лабуда замість драйверів.

    На прикладі зображенні вище я обвів ті сайти, на яких драйвера дійсно найчастіше можна знайти і без проблем завантажити. Ось ці сайти:

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

    А тепер розглянемо кілька прикладів завантаження драйверів з різних сайтів.

    Приклад завантаження драйвера з сайту driver.ru:

    Коли ви потрапите на сайт із результатів пошуку, на сторінці вже будуть відображатися драйвера, більшість з яких сумісна з вашим пристроєм.

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

    Не забудьте звертати увагу на версію Windows, для якої призначено драйвер.

    Майте на увазі!
    Драйвера для Windows 8, Windows 8.1 і Windows 10 дуже часто сумісні і, якщо ви, наприклад, не змогли знайти драйвера конкретно для Windows 8.1, спробуйте встановити драйвера для Windows 8. Або якщо не змогли знайти драйвера для Windows 10, спробуйте встановити від Windows 8.1 або Windows 8. Буває також, що драйвери для Windows 7 сумісні з Windows 8, 8.1 і Windows 10. Тобто. можна намагатися встановлювати драйвера від різних систем.

    Розглянемо приклад процесу завантаження з цього сайту. Знайшовши потрібний драйвер, клацаємо по кнопці завантаження внизу:

    У наступному вікні потрібно підтвердити, що ви не робот, поставивши галочку в зазначеному місці (див. зображення нижче). Потім натисніть унизу кнопку «Завантажити»:

    І нарешті, на черговій сторінці побачимо в самому верху посилання на завантаження у вигляді назви файлу з розширенням:

    Клацаємо по ній і завантажуємо файл.

    Приклад завантаження драйвера з сайту members.driverguide.com:

    Перейшовши на сайт із пошукової системи, на сторінці з'явиться список ймовірно сумісних драйверів з вашим пристроєм:

    Клікнувши по кнопці завантаження відкриється Нова сторінка, де в очі впадає велика кількість реклами

    Увага!
    Не клікайте куди потрапило якщо на сайті багато реклами, будьте уважні, інакше можна підчепити віруси та іншу заразу на комп'ютер!

    У наступному вікні в центрі з'явиться віконце для підтвердження того, що ви реальна людина, а не програма:) Вам потрібно дочекатися завантаження вмісту вікна і натиснути кнопку «Показати»:

    Відкриється нове вікно, де знову кілька секунд очікуємо на завантаження вмісту. У вікні з'явиться код поруч із написом: "Введіть". Цей код потрібно переписати в точності як у рядок нижче ("Your Answer") і натиснути "Return to Page":

    Вас поверне на початкову сторінку, де тепер з'явиться кнопка «Continue». Натиснувши її почнеться завантаження драйвера на комп'ютер:

Ось таким альтернативним способомможна спробувати вручну знайти драйвер за кодом пристроїв. Звичайно для цього варіанту я показав на прикладах завантаження драйвера тільки з 2-х сайтів, а їх величезна кількість. Але принцип завантаження на всіх сайтах однаковий. Відрізняється лише здебільшого інтерфейс і іноді порядок скачування.

Але я більше схиляюся, що ви зможете легко знайти драйвера і за основним методом, запропонованим у варіанті №1.

Варіант №2. Пошук драйверів на офіційних сайтах виробників пристроїв

Якщо у вас не вдалося знайти драйвера для ваших пристроїв за одним варіантом, то це можна зробити ще ось таким способом.

Вам потрібно буде переглянути виробника та модель кожного пристрою в комп'ютері через документацію до них або спеціальні програми(наприклад, Aida64 або Sysinfo Detector), після чого окремо шукати драйвера для кожного пристрою через офіційний сайт виробника або (якщо на офіційному сайті драйвером немає) в інтернеті за моделлю пристрою.

Візьмемо такий приклад. У диспетчері пристроїв у мене видно, що не встановлений у системі драйвер на відеокарту і ще якийсь незрозумілий пристрій:

Як визначив, що на відеокарту? А тому що якщо у списку пристроїв у розділі «Відеоадаптери» є пристрій «Стандартний VGA графічний адаптер», значить немає драйвера на відеокарту, інакше пристрій мав би назву відеокарти, наприклад «NVIDIA GeForce GTX980».

Давайте розглянемо послідовність ваших дій:

    Узнаємо виробника та модель пристрою.

    Зверніть увагу!
    Якщо у диспетчері пристроїв у вас є "Невідомий пристрій", то ймовірно не встановлений драйвер для якогось пристрою материнської платиабо спеціальна програма для материнської плати. Отже, потрібно спочатку встановити всі драйвери для вашої материнської плати та програми для неї.

    Якщо ви збирали комп'ютер з окремих комплектуючих, то у вас могли залишитися документи щодо кожного придбаного пристрою, де зазначено, що нам потрібно - виробник і модель. Якщо документації ніякої не залишилося, то дізнатися про модель допоможе одна з програм, що визначають залізо вашого комп'ютера. Я рекомендую Aida64 або Sysinfo Detector. Перша – платна, але ви можете скористатися їй безкоштовно протягом 30 днів. А друга має повністю безкоштовну редакцію. Якщо думаєте, що вибрати, то вибирайте тимчасово - Aida64, оскільки якість цієї програми все-таки вище буде.

    Як встановлювати та користуватися програмою Aida64 розказано у статті:

    Як встановлювати та користуватися Sysinfo Detector розказано у статті:

    Якщо ви визначаєте пристрої через програму Aida64то визначити, що за пристрої без драйверів можна, вибравши зліва розділ «Пристрої > Пристрої Windows», а потім праворуч відкрити категорію «Unknown» (невідомі). Внизу з'явиться інформація про вибраний пристрій:

    Отже, у моєму прикладі невідомий пристрій має назву Asus ATK-110 ACPI Utility.

    Вище я згадував, що невідомий пристрій - це, швидше за все, щось на материнській платі, тому визначимо відразу, яка материнська плата в пристрої. Для цього відкриваємо розділ «Системна плата» та переходимо в такий же підрозділ. Справа у вікні побачимо виробника та модель системної плати: Asus P5KPL-AM EPU.

    Тепер розберемося із відеокартою. Відеокарта, як правило, правильно визначається в Aida64 через розділ "Відображення" > "Відео PCI/AGP". Як бачимо, програма визначила відеокарту: "nVIDIA GeForce GT 430":

    Якщо ви дивитеся пристрої через Sysinfo Detector, то побачити пристрої з невстановленими драйверами можна двома способами. Перший — у розділі «Відхилення»:

    Як бачимо, виявлено той самий пристрій, що і через програму Aida64: ACPI/ATK0110

    І другий спосіб - у розділі "PCI-пристрої" вибрати підрозділ "Невідомі пристрої". Тут програма побачила відразу 3 «проблемні» пристрої та один з них, якраз материнська плата: Asus P5KPL-AM EPU.

    Виробника та модель відеокарти краще подивитися в розділі «PCI-прилади». У списку знайдіть підрозділ "Display controller":

    З прикладу видно, що виробник карти NVIDIA, а модель GeForce GT 430.

    Отже, потрібні дані дізналися і тепер шукатимемо драйвер.

    Шукаємо драйвер на сайтах-виробниках пристроїв.

    З'ясували, що не вистачає драйвера, швидше за все, для якогось пристрою на материнській платі, а може бути якоїсь програми спеціально для материнської плати. Виробник плати - Asus, а модель у прикладі P5KPL-AM EPU. Якщо виробник Asus, то будемо шукати на офіційному сайті Asus.

    Про те як шукати офіційний сайт виробника пристрою та скачувати з нього драйвера докладно описано. Якщо коротко, вам потрібно відкрити пошукову систему систему Google, набрати там назву виробника та відкрити перший сайт у результатах пошуку. Далі слід перейти до розділу «Сервіс» або «Підтримка» та вказати модель пристрою, наприклад:

    Крім драйверів, звертайте увагу і на розділ «Утиліти» (його видно у списку на зображенні вище), тому що іноді «Нерозпізнаний пристрій» — це якась спеціальна програма для материнської плати. Краще встановити весь комплект для материнської плати, представлений на сайті, щоб перевірити, чи була проблема.

    У цьому прикладі показано пошук драйверів для материнської плати. Якщо встановити всі драйвери та утиліти для неї, то "Невідомий пристрій" з диспетчера пристроїв має зникнути.

    Знайдемо драйвер для відеокарти. Судячи з даних, взятих із програм Aida64 і Sysinfo Detector, виробник відеокарти – NVIDIA, а модель GeForce GT 430. Якщо виробник NVIDIA, значить шукаємо офіційний сайт цієї компанії точно також через Google:

    На сайті відразу бачимо розділ «Драйвери» та в ньому пункт «Завантажити драйвери». Відкриваємо:

    Відкриється вікно, де необхідно вказати дані про відеокарту. Тип продукту в моєму прикладі GeForce, якщо модель GeForce GT 430, то серія продуктів підходить GeForce 400 Series. Тут не складно зорієнтуватися. Далі у списку «Сімейство товарів» вибираємо вже саме модель – «GeForce GT 430». І залишилося вибрати тільки версію Windows, встановлену на вашому комп'ютері та мову драйвера. Потім натискаємо «Пошук»:

    Відкриється сторінка, щоб завантажити потрібний драйвер. Натискаємо кнопку «Завантажити зараз»:

    На наступній сторінці приймаємо умови угоди та натискаємо кнопку «Прийняти та завантажити»:

Таким же чином ви можете завантажити драйвер, в принципі, для будь-якого пристрою, знаючи його виробника та модель. Потрібно лише знайти офіційний сайт виробника і вказати там модель.

У крайньому випадку, якщо, наприклад, не вдається знайти драйвера на офіційному сайті, ви можете пошукати їх на інших сайтах, вказавши в пошуку Googleприблизно такий запит: «драйвер для Asus P5KPL-AM EPU». Замість Asus P5KPL-AM EPU вам відповідно потрібно вказати виробника і модель саме вашого пристрою, для якого шукайте драйвера.

Ну і на закінчення відзначу, що якщо ви користуєтеся Windows 8 і старше, то проблем з драйверами швидше за все у вас не буде. Ці системи встановлюють у більшості випадків всі драйвери автоматично відразу після інсталяції Windows. Пробував на кількох ноутбуках перевстановити Windows 8.1 та Windows 10 і на кожен були встановлені автоматично всі драйвери, внаслідок чого відпала потреба шукати їх самому.

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

Також можна автоматично встановити драйвера на комп'ютер за допомогою спеціальних програм. Про таку можливість розказано в окремій статті:

Усього Вам доброго! До зустрічі в інших статтях:)

Сьогодні ми розглянемо:

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

Крім цього, який звуковий драйвернеобхідний для свого ПК, потрібно знати і з причин погіршення роботи звукових пристроїв на комп'ютері.

Звукова карта не визначається ОС

Розглянемо випадки, коли операційна система не може самостійно вибрати драйвер для звукової карти персонального комп'ютера. У процесі переустановки системи та її перезавантаження, це визначається відсутністю звукових сигналів.

Причиною створення такої ситуації може бути встановлене звукове обладнанняна персональному комп'ютері, що: рідко зустрічається; дата випуску старша, ніж установлювана ОС.
У такому випадку потрібно вручну виконати установку звукового драйвера. Існує кілька способів визначення необхідного звукового драйвера для ПК.

Допомога Microsoft у визначенні звукового драйвера

Операційна система комп'ютера пропонує власну допомогу у визначенні потрібного звукового драйвера. Необхідно направити курсор на папку "Мій комп'ютер" натискаємо праву кнопку миші (ПКМ), далі "Властивості", потім "Обладнання". Можна зробити простіше: папка "Мій комп'ютер" натискаємо ПКМ, переходимо до розділу диспетчер пристроїв.

Відкриється список у диспетчері пристроїв, вибираємо звукову карту (немає драйвера, поруч із нею стоїть знак оклику). Виділяємо рядок, вгорі є опція "Оновити драйвер", потім пункт "Пошук драйверів", коли все відбувається з позитивним результатом, буде запропоновано вікно "Встановити".

Ручний варіант пошуку звукового драйвера

Коли автоматичний вибір звукового драйвера не вийшов, треба намагатися знайти його вручну, для цього переходимо до будь-якої пошукової системи (Google, Яндекс). Потім у пошуковому рядку вводимо назву свого звукового пристрою на ПК і додаємо «+ драйвер», у вікні вибираємо потрібний для нас.

Який драйвер потрібен для персонального комп'ютера? Це легко побачити на вкладці Диспетчер пристроїв. Рекомендується завантажувати драйвер на офіційному сайті виробника встановленої материнської плати (коли звукова картавбудована у неї). Пропонується також завантажити драйвер із сайту, що спеціалізується на оновленні цього обладнання для ПК.

Після скачування драйвера переходимо знову на вкладку «Диспетчер пристроїв», відкриваємо «Пошук драйверів на ПК», вказуємо місце, куди його зберегли, «Встановити».

Встановлення звукового драйвера програмою

Бувають випадки, коли користувачеві комп'ютера складно знайти звуковий драйвер вручну та за допомогою ОС, тоді пропонується його пошук спеціальної програми. В даний час для цієї мети є кілька програм: Driver Checker, Sam Drivers, Device Doctor, інші програми.

Працювати із інтерфейсом програм цього виду, зрозуміло, на інтуїтивному рівні.

Бувають різні випадки, коли необхідно визначити звуковий драйвер для свого ПК, фахівці радять:

  • Визначити модель встановленого звукового пристрою на комп'ютері (читаємо на комп'ютері). Можливо, відсутність звуку через не встановленого обладнання, заборони його використання в BIOS.
  • Коли звук, на ПК інтегрований, рекомендується завантажувати звуковий драйвер тільки з сайту виробника «материнської плати», або ж у разі окремої установкизвукової картки списати з неї маркування чіпа. Через систему пошуку маркування знайти необхідний драйвер.
  • Рекомендується користуватися програмою AIDA 64, вона не лише покаже необхідний звуковий драйвер, але й усі встановлене обладнання, можна визначити маркування чіпа.

Дізнайтеся, як шукати потрібні драйвери для будь-яких пристроїв, підключених до Вашого комп'ютера, без особливих зусиль.

Незважаючи на те, що на подвір'ї вже ХХI століття та комп'ютери є майже у всіх, багато хто ставиться до них як до якогось недоторканного дива техніки. Причому, свято вірячи в те, що у них найкращий ПК (бо так сказав продавець:)), такі користувачі не встановлюють на нього жодних програм і не спроможні перевірити, а чи правда комп'ютер працює нормально.

Навіщо я? До того, що недавно довелося зіткнутися з нагоди, коли в одних товаришів майже півтора роки після покупки комп'ютера не стояло нормального драйвера відеокарти! Скарга була звичайна - "":) А чому б йому не гальмувати, якщо драйвера немає?!!

Загалом, сьогодні перевірятимемо свої ПК на наявність у них усіх потрібних драйверів.

Що таке драйвер та як його встановити?

Драйвер – це набір програмних компонентів, які забезпечують нормальну взаємодію комп'ютера з підключеним до нього обладнанням та картами розширень. Іншими словами, це спеціальна службова програма, яка може передавати команди від периферії до процесора та назад.

Без драйвера підключене обладнання або взагалі не буде працювати (принтери, сканери та інша оргтехніка), або буде працювати, але не в оптимальному режимі (відеокарти, чіпсети і т.п.). Саме тому для нормальної роботиПК мало просто перевстановлення системи, важливо ще й знайти драйвери для всіх її компонентів!

Поставлятися драйвер може у трьох варіантах:

  1. настановний файл EXE(або MSI);
  2. графічна оболонка з можливістю масового вибору та встановлення;
  3. набір бібліотек та службових файлів, доповнений INF-файлом.

Перший варіант поставки драйверів найчастіше зустрічається в Інтернеті та на установочних дисках, які йдуть у комплекті з придбаним Вами обладнанням. Достатньо завантажити (або відкрити на диску) та запустити EXE-файл, і перед нами з'явиться Майстер установки, який дозволить налаштувати все у покроковому режимі. В цьому випадку встановлення драйвера не складніше, ніж встановлення будь-якої програми.

Другий варіант поставки можна виявити, на дисках з різними складаннями, що містять кілька різних драйверів (наприклад, драйвера для материнської плати або так звані драйвер паки). Такі збірки зазвичай дозволяють вибірково встановлювати окремі (або всі відразу) драйвери і не складніше звичних інсталяторів, але мають великий розмір.

Установка драйвера третім способом є найбільш неочевидною. Такі драйвера часто трапляються для старої техніки і не містять графічного інсталятора, зате включають файл (іноді й не один) з розширенням INF, в якому прописані всі шляхи встановлення пакета бібліотек для роботи обладнання, що підключається:

Щоб встановити драйвер у такий спосіб потрібно в "Диспетчері пристроїв" (значок "Комп'ютер" - ПКМ - "Властивості" (на старих системах вкладка "Обладнання")) викликати контекстне меню невідомого пристрою і вибрати пункт "Оновити драйвери".

Відкриється вікно, з якого ми маємо пройти такий шлях (натискаючи на відповідні кнопки): "Виконати пошук драйверів на цьому комп'ютері" - "Вибрати драйвер зі списку вже встановлених" - "Встановити з диска", а потім натиснути кнопку "Огляд" і вказати місцезнаходження потрібного Вам INF-файлу:

Після підтвердження вибору INF-файлу з'явиться повідомлення або про успішну установку, або про те, що вибраний файл не підходить і потрібно вибрати інший (якщо він є). Якщо жоден з INF-файлів не дає встановити потрібний драйвер, значить Вам доведеться шукати альтернативне ПЗ або взагалі змінювати обладнання або систему, щоб домогтися сумісності пристрою з Вашим ПК.

Ну, а тепер, коли Ви знаєте, що таке драйвер, навіщо він потрібен і як його встановити, настав час розібратися зі способами пошуку драйверів.

Пошук за назвою пристрою

Будь-який пристрій (якщо це не якийсь безіменний китайський виріб) має свою назву. Знаючи цю назву та версію своєї системи, Ви, в більшості випадків, можете сформулювати правильний пошуковий запитдля введення в пошуковій системі. Наприклад: "драйвер принтера Canon IP1500 для Windows 7 64-bit" або "Radeon HD 8700M Windows 8 драйвер".

Результати пошукової видачі будуть містити сайти, з яких Ви можете завантажити потрібний драйвер. Однак, не на всіх сайтах можна качати безкоштовно! Щоб уникнути непотрібних переживань через фінанси або встановлення неякісного софту, рекомендую Вам користуватися перевіреним російськомовним порталом:

На цьому сайті зібрана одна з повних колекційдрайверів із усього Інтернету сумарним об'ємом понад 300 ТБ! Тут можна шукати драйвер як за типом пристрою (основний список "Категорії обладнання"), так і за назвою виробника (алфавітний указівник у верхній частині сторінки).

На сторінці з потрібним компонентом буде низка варіантів завантажень. Звертайте увагу на поля "Тип програми" (там має бути слово "driver" інакше можете завантажити просто сервісну утиліту або плагін), "Опис" (там теж сказано, для чого потрібен той чи інший файл), а також "Система". Завантажити сам драйвер Ви можете за посиланням після опису, підтвердивши, що Ви не робот:)

Окрім пошуку драйверів на спеціалізованих репозиторіях, іноді має сенс шукати на сайтах розробників! Наприклад, драйвера під популярні відеокарти часто оновлюються і завантажити останню версіюВи можете часто лише на офіційному сайті. Тому наведу невеликий список посилань на сторінки завантаження драйверів від найпоширеніших марення.

Відеокарти:

Звукові карти:

Оргтехніка:

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

Пошук по ID пристрою

Пошук драйвера за назвою Вашого пристрою – досить просте завдання. Однак якщо сам пристрій від невідомого виробника, то й назви ми його знати ніяк не можемо! Якщо Ви зіткнулися з такою ситуацією, то Вам допоможе альтернативний метод пошуку – за ідентифікатором обладнання.

Кожен пристрій, хоч усередині системного блоку, хоч підключений зовнішнім кабелем, має власний ідентифікатор або ID. Дізнатися його ми можемо у вже знайомому нам "Диспетчері пристроїв", викликавши "Властивості" потрібного компонента, перейшовши на вкладку "Відомості" і вибравши у списку "Властивість" пункт "ІД обладнання" або "ID":

Починаючи з Windows Vista, Ви можете скопіювати значення рядка ідентифікатора в буфер обміну за допомогою контекстного меню. У ранніх версіях функції копіювання немає, тому ID доведеться переписувати вручну.

Тепер, знаючи ідентифікатор потрібного нам пристрою, ми можемо знайти драйвери, що підходять до нього, за допомогою спеціалізованих сервісів. Тут нам знову допоможе вже згаданий вище Driver.ru:

Для цього натисніть кнопку "Пошук" у правому верхньому кутку і в полі на сторінці, що відкрилася, вставте скопійований ідентифікатор пристрою, після чого обов'язково позначте пункт "Пошук за ID" і натисніть кнопку "Пошук" під полем введення. Серед результатів, що відкрилися, Ви легко знайдете драйвер, що підходить для Вашої системи і зможете його скачати.

Аналогічно працює ще кілька великих порталів для пошуку драйверів. Найкращими з них є DevID.info та DevID.drp.su. До речі, обидва сервіси мають власні клієнти, що дозволяють автоматично визначати потрібні драйвери і встановлювати їх. Про подібний спеціалізований софт і поговоримо далі.

Програми для пошуку драйверів

Вище ми розглянули випадки коли шукати драйвери доводиться вручну. Однак, для цього також існують спеціальні програми, що дозволяють знаходити та качати все в автоматичному режимі. Усі їх можна поділити на два типи.

Програми першого типу є зазвичай невеликі (до десяти мегабайт) клієнтські модулі, які дозволяють просканувати комп'ютер на наявність застарілих або невстановлених драйверів, а потім завантажити їх з Інтернету і встановити в кілька кліків. У нас на сайті яскравим представником програм подібного роду є:

Проте, у більшості подібних рішеньє один великий мінус: безкоштовно можна завантажити лише пару-трійку драйверів на добу. По перевищенню ліміту Вам або зовсім заборонять качати, або зменшать швидкість завантаження до мінімуму, щоб Ви зрештою все одно купили преміум-аккаунт.

З цієї причини програми даного виду безкоштовно можна використовувати тільки для одиничного оновлення драйверів, але не для пакетної установки на свіжовстановлену Windows. Якщо ж Ви хочете все і відразу, Ваш вибір - драйвер паки!

Драйвер пак (від англ. " driver pack" - "набір драйверів") являє собою найчастіше комплект з офлайн бази з відібраними драйверами та програми-оболонки. Програма сканує Ваш ПК, після чого пропонує встановити або оновити ряд драйверів. Вам достатньо лише відзначити потрібні та підтвердити свій вибір. відбудеться в автоматичному режимі!

На просторах Рунета найповнішим і найпопулярнішим драйвер паком є:

На сьогоднішній день розмір максимального пакета постачання цього пакета драйверів складає більше ніж 10 гігабайт. Це не так вселяє, як 30-терабайтна база Driver.ru, але, однак, такої кількості драйверів цілком достатньо, щоб після переустановки системи не шукати настановні диски, які йшли в комплекті з материнською платою, відеокартою та іншими компонентами Вашого ПК або ноутбука

Якщо качати 10 гігабайт драйверів Вам не хочеться, то є можливість завантажити Lite-версію DriverPack Online. Вона є лише програмою-сканером, яка визначає потрібні Вам драйвери, підключається до онлайн бази даних і дозволяє завантажити тільки те, що потрібно.

Висновки

Сьогодні знайти драйвери для комп'ютера і ноутбука не складає особливих труднощів. Однак, як і будь-які програми, вони час від часу потребують оновлень, про які багато хто забуває. А, між іншим, оновлення можуть дуже допомогти!

Так, наприклад, у мене з весни час від часу став з'являтися "" зі скаргами на якусь DLL-бібліотеку. Деякий час я мирився з таким станом речей, але потім набридло і я вирішив пошукати вирішення проблеми. Виявилося, що провиною була помилка в роботі драйвера відеокарти. Після оновлення драйвера все налагодилося і вже кілька місяців "політ" нормальний:)

Мораль всього вищевикладеного така: якщо у Вас раптом почалися "глюки" у роботі ПК або вони спостерігалися вже з моменту покупки комп'ютера повторної установки Windows, перевірте, чи немає оновлень драйверів для критично важливих компонентівВаш комп'ютер. Якщо такі є, спробуйте їх встановити і, можливо, Ваша система знову запрацює як слід!

P.S. Дозволяється вільно копіювати та цитувати цю статтю за умови вказівки відкритого активного посилання на джерело та збереження авторства Руслана Тертишного.

Напевно у кожного, хто хоч раз самостійно встановив заново операційну систему, виникало популярне питання: як дізнатися, які драйвера необхідно встановити на комп'ютер для його стабільної роботи? Саме це питання ми й спробуємо відповісти у цій статті. Давайте розбиратися докладніше.

Теоретично, на комп'ютер або ноутбук потрібно встановлювати софт для всіх пристроїв, які цього вимагають. Згодом розробники операційних системпостійно розширюють основу драйверів Microsoft. І якщо в часи Windows XP доводилося встановлювати вручну чи не всі драйвера, то у випадку з новішими ОС безліч драйверів встановлюються вже автоматично. Проте залишаються пристрої, софт для яких доводиться встановлювати вручну. Пропонуємо до вашої уваги низку способів, які допоможуть вам у вирішенні цього питання.

Спосіб 1: Офіційні сайти виробників

Для того, щоб встановити всі необхідні драйвери, вам потрібно поставити програмне забезпечення для всіх плат у вашому комп'ютері. Мається на увазі материнська плата, відеокарта та зовнішні плати ( мережеві адаптери, звукові карти тощо). При цьому в «Диспетчері пристроїв»може бути не зазначено, що для обладнання потрібні драйвери. При установці операційної системи просто використовувалося стандартне програмне забезпечення для пристрою. Тим не менш, софт для таких аксесуарів необхідно встановлювати оригінальний. Більшість встановлюваного софту посідає материнську плату і інтегровані у ній чіпи. Тому спочатку ми будемо шукати всі драйвера для материнської плати, а потім вже для відеокарти.

  1. Дізнаємося виробника та модель материнської плати. Для цього натискаємо клавіші "Win+R"на клавіатурі і у вікні, вводимо команду "cmd"для відкриття командного рядка.
  2. В командному рядкунеобхідно ввести по черзі команди:
    wmic baseboard get Manufacturer
    wmic baseboard get product
    Не забуваємо натискати "Enter"після введення кожної команди. В результаті ви побачите на екрані виробника та модель вашої материнської плати.
  3. Тепер шукаємо в інтернеті сайт виробника та заходимо на нього. У нашому випадку це.
  4. На сайті знаходимо поле для пошуку або відповідну кнопку у вигляді лупи. Як правило, натиснувши на цю кнопку ви побачите пошукове поле. У таке поле необхідно ввести модель материнської плати та натиснути "Enter".
  5. На наступній сторінці ви побачите результат пошуку. Необхідно вибрати зі списку материнську плату. Зазвичай за назвою моделі плати є кілька підрозділів. Якщо є розділ "Драйвера"або «Завантаження», натискаємо на назву такого розділу та переходимо в нього.
  6. У деяких випадках наступну сторінку можна розділити на підрозділи з ПЗ. Якщо це так, то шукаємо та вибираємо підрозділ «Драйвери».
  7. Наступним кроком буде вибір операційної системи та розрядності зі списку. Зверніть увагу, що в деяких випадках у списках драйверів можуть бути відмінності під час вибору різних ОС. Тому перегляньте не тільки ту систему, яка встановлена ​​у вас, але й нижче версії.
  8. Після вибору ОС ви побачите список всього ПЗ, яке потрібне вашій материнській платі для взаємодії з іншими компонентами комп'ютера. Необхідно завантажити їх усі та встановити. Завантаження відбувається автоматично після натискання на кнопку , "Download"або відповідну іконку. Якщо ви завантажили архів з драйверами, перед установкою обов'язково вийміть весь вміст в одну папку. Після цього вже встановлюйте програмне забезпечення.
  9. Після того, як ви встановите весь софт для вашої материнської плати, переходимо до відеокарти.
  10. Натискаємо знову комбінацію клавіш "Win+R"і в вікні вводимо команду "dxdiag". Для продовження тиснемо "Enter"або кнопку "ОК"у цьому ж вікні.
  11. У вікні засоби діагностики переходимо на вкладку «Екран». Тут ви зможете дізнатися виробника та модель вашого графічного адаптера.
  12. Якщо у вас ноутбук, необхідно також перейти на вкладку «Перетворювач». Тут ви зможете побачити інформацію про другу дискретну відеокарту.
  13. Після того, як ви дізналися виробника та модель вашої відеокарти, необхідно перейти на офіційний сайт компанії. Ось список сторінок завантажень найбільших виробників графічних адаптерів.
  14. Вам необхідно на цих сторінках вказати модель вашої відеокарти та операційну систему із розрядністю. Після цього ви зможете завантажити софт та встановити його. Зверніть увагу, що бажано встановлювати програмне забезпечення для графічного адаптера саме з офіційного сайту. Тільки в цьому випадку будуть встановлені спеціальні компоненти, які збільшать продуктивність відеокарти та дозволять зробити її детальне налаштування.
  15. Після встановлення програмного забезпечення для графічного адаптера та материнської плати необхідно перевірити результат. Для цього відкриваємо "Диспетчер пристроїв". Натискаємо поєднання кнопок "Win"і "R"на клавіатурі, і у вікні пишемо команду devmgmt.msc . Після цього натискаємо "Enter".
  16. В результаті ви побачите вікно "Диспетчера пристроїв". У ньому не повинно бути непізнаних пристроїв та обладнання, поряд з назвою якого знаходяться питання або знаки оклику. Якщо все так, то всі необхідні драйвера ви встановили. А якщо такі компоненти присутні, рекомендуємо використовувати один із таких способів.

Спосіб 2: Утиліти для автоматичного оновлення програмного забезпечення

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

Ви можете використовувати будь-яку з описаних утиліт. Але рекомендуємо все ж таки скористатися DriverPack Solution або Driver Genius. Це програми з найбільшою базою драйверів та обладнання, що підтримується. Ми вже розповідали вам про те, як користуватись DriverPack Solution.

Тому давайте ми розповімо вам про те, як знайти та встановити всі драйвери за допомогою програми Driver Genius. Тож почнемо.

  1. Запускаємо програму.
  2. Ви відразу ж опинитеся на її головній сторінці. Тут посередині знаходиться зелена кнопка «Почати перевірку». Натискаємо сміливо на неї.
  3. Запуститься процес сканування комп'ютера або ноутбука. Через кілька хвилин ви побачите список всіх пристроїв, для яких потрібно завантажити та встановити програмне забезпечення. Оскільки ми не шукаємо певний драйвер, то відзначаємо галочками всі наявні пункти. Після цього тиснемо кнопку «Далі»у нижній області вікна програми.
  4. У наступному вікні ви побачите список пристроїв для яких вже були оновлені драйвера за допомогою даної утиліти, і ті пристрої, для яких ще потрібно завантажити і встановити. Останній тип пристроїв позначений сірим колом поряд із назвою. Для надійності натискаємо просто кнопку "Завантажити все".
  5. Після цього програма спробує підключитись до серверів для завантаження необхідних файлів. Якщо все пройде вдало, ви повернетеся до попереднього вікна, де зможете відстежити прогрес завантаження програмного забезпечення у відповідному рядку.
  6. Коли всі компоненти будуть завантажені, значок поруч із назвою пристрою стане зеленого кольору з спрямованою вниз стрілкою. На жаль, встановити все програмне забезпечення однією кнопкою не вдасться. Тому виділяємо рядок з необхідним пристроєм і тиснемо кнопку "Встановити".
  7. За бажанням створюємо точку відновлення. Це вам запропонують у наступному діалоговому вікні. Вибираєте відповідь, яка відповідає вашому рішенню.
  8. Після цього розпочнеться процес встановлення драйвера для вибраного пристрою, під час якого можуть виникати стандартні діалогові вікна. У них необхідно просто читати ліцензійні угоди та натискати кнопки «Далі». Проблем на цьому етапі у вас не виникне. Після встановлення того чи іншого програмного забезпечення вам можуть запропонувати перезавантажити систему. Якщо таке повідомлення буде, рекомендуємо це зробити. Коли драйвер буде успішно встановлений, у програмі Driver Genius навпроти рядка з обладнанням буде зелена галочка.
  9. Таким чином, необхідно встановити софт для всього обладнання зі списку.
  10. Наприкінці можете ще раз перевірити сканування комп'ютера. Якщо ви встановили всі драйвери, побачите подібне повідомлення.
  11. Крім того, ви можете перевірити, чи встановлено все програмне забезпечення, за допомогою "Диспетчера пристроїв"як описано наприкінці першого способу.
  12. Якщо залишилися ще непізнані пристрої, спробуйте наступний спосіб.

Спосіб 3: Онлайн-сервіси

Якщо попередні методи вам не допомогли, залишається сподіватися на цей варіант. Сенс його полягає в тому, що шукати ПЗ ми будемо вручну за унікальним ідентифікатором пристрою. Щоб не дублювати інформацію, рекомендуємо ознайомитися з нашим уроком.

У ньому ви знайдете детальну інформацію про те, як знайти ID та що з ним робити далі. А також посібник із використання двох найбільших онлайн-сервісів з пошуку драйверів.

Спосіб 4: Ручне оновлення драйвера

Цей спосіб є найменш ефективним з усіх наведених вище. Однак, у дуже рідкісних випадках допомогти встановити софт зможе саме він. Ось що для цього потрібно.


Це самі дієві методивизначити пристрої, котрим необхідно встановити софт. Сподіваємося, один із запропонованих варіантів допоможе вам у вирішенні цього питання. Не забувайте вчасно оновлювати програмне забезпечення для ваших пристроїв. Якщо у вас виникнуть труднощі з пошуком або встановленням драйверів, пишіть у коментарі. Разом ми все виправимо.

Як ми знаємо, на апаратному рівні сучасний комп'ютер складається з функціональних вузлів, що становлять ті чи інші електронні компоненти. Широкому колу користувачів персональних комп'ютерівзнайомі такі функціональні блоки як: процесор, пам'ять, відеокарта, звукова карта, жорсткий диск, контролер вводу-виводу (що забезпечує роботу клавіатури, миші, джойстика, USB-носіїв (флешок)), принтер, сканер та деякі інші. Фізично дані пристрої взаємодіють між собою за допомогою спеціальних шин і протоколів, створюючи сукупністю своєї взаємодії симбіоз операцій, який, в загальному випадку, характеризує функціонування комп'ютера. Але хіба комп'ютер є лише набір електронних компонентів? Звичайно ж ні, адже один з основних апаратних модулів, центральний процесор, спроектований для виконання машинних інструкцій, із послідовностей яких, як ми знаємо, складаються програми, у світлі цього було б доречно згадати ще про один рівень - програмний. Тепер давайте повернемося в не стільки далеке минуле; на зорі комп'ютерної ери код програм (які часто писалися безпосередньо в машинних кодах / низькорівневих мовах) міг легко взаємодіяти з апаратурою безпосередньо, оскільки апаратна архітектура була відносно простою. Однак з часом технології розвивалися, апаратний і програмний рівні еволюціонували взаємопов'язано, і перший прийшов до появи великої різноманітності пристроїв, а другий до появи величезної різноманітності програмних модулів, що зумовили, надалі, появу операційних систем. Операційна система стала ключовою віхою в історії розвитку комп'ютерної індустрії, оскільки саме вона, серед іншого, виконувала роль сполучної ланки, своєрідного координатора (диспетчера), який забезпечив взаємодію між пристроями та програмами: приймала запити від програмного шару (наприклад, програм користувача) на обмін даними з тим чи іншим пристроєм і навпаки, тобто фактично виконувала роль сполучення між апаратною та програмною частинами. Операційні системи теж не стояли дома, і якщо спочатку взаємодія операційної системи з апаратурою комп'ютера було відносно простим, то в міру ускладнення архітектури та введення нових апаратних можливостей, ускладнювалася і структура операційної системи. Протягом усього часу розвитку операційних систем розробники намагалися створити код, що забезпечує повноцінну взаємодію з максимально можливою кількістю наявних на ринку апаратних пристроїв. Тим не менш, подібний підхід, у міру ускладнення архітектури персональних комп'ютерів x86, привів до появи концепції відокремленого програмного шару, що має назву драйвер, відповідального за взаємодію з тим чи іншим класом/типом пристроїв. Концепція драйвера виявилася настільки вдалою, що, крім основного напряму - підтримки фізичних пристроїв, була екстраполована і на деякі категорії логічних/віртуальних пристроїв. У цій статті ми розповідатимемо про те, що ж собою представляє драйвер Windows.

Теорія

Давайте трохи відійдемо від концепції драйвера та розглянемо загальну теорію. Для того, щоб зрозуміти що ж є драйвер у системі, спочатку необхідно пройти мінімум теорії із загальної архітектури x86-64. Чому x86, та тому що саме ця платформа: а) обрана мною для експериментів; б) є найбільш поширеною в клієнтському сегменті операційних систем Windows. Озвучені у цьому розділі особливості дадуть нам розуміння багатьох аспектів роботи як безпосередньо операційної системи, і, відповідно, драйверів у її складі.

Режими роботи процесора

Внутрішня структура будь-якої операційної системи базується на апаратних особливостях платформи, де вона працює. Центральною ланкою є процесор, процесори архітектури x86-64 мають кілька режимів роботи:

  • Реальний режим (Real mode);
  • Віртуальний режим (Virtual mode);
  • Захищений режим (Protected mode);
  • Довгий режим (Long mode).

На зорі ери розвитку персональних комп'ютерів архітектури x86 процесор працював у реальному режимі. Тим не менш, реальний режим поступово пішов у минуле, оскільки мав ряд особливостей, що унеможливлюють подальший розвиток технологій: 16-бітну шину даних та 20-бітну шину адреси (обмеження за адресацією), сегментну адресацію з розмірами сегментів у 64 кілобайти (незручність використання адресного простору), відсутність розмежування доступу до адресного простору. З метою зняття існуючих обмежень було розроблено захищений режим, який надавав ряд важливих для розвитку операційних систем особливостей: "багатозадачність", механізм захисту (доступ до привілейованих команд), що забезпечує контроль доступу різних ділянок коду (програм) один до одного, модель віртуальної пам'яті. У захищеному режимі процесорів Intelархітектури x86 реалізовані так звані кільця захисту чи рівні привілеїв. Усього їх чотири: 0 (найбільш привілейований), 1, 2 та 3 (найменше привілейований). Рівні привілеїв покликані захистити код режиму ядра від користувальницьких програм і програм один одного, оскільки це може призвести до порушення працездатності. Однак операційна система Windows не використовує всі перераховані рівні, в ній задіяні лише два з них: 0-й та 3-й.
Для наочності розуміння цього наведемо спрощену схему взаємодії компонентів Windows:

Як ви бачите, внутрішнє середовище операційної системи Windows поділено на дві частини та підтримує два режими виконання:

  • Режим користувача- непривілейований режим, зіставлений з апаратним третім кільцем захисту процесора;
  • Режим ядра - привілейований режим, зіставлений з апаратним 0-м кільцем захисту процесора;

У цій особливості полягає самий, мабуть, важливий момент розуміння внутрішньої будови Windows: глобально операційна система як би поділена на дві основні частини: режим користувача і режим ядра.

Це варто зрозуміти, усвідомити і запам'ятати раз і назавжди, оскільки, власне, це одна з базових, основних концепцій багатьох сучасних операційних систем.
Режими користувача і режим ядра мають такі відмінності:

  • Ізольованими (не перетинаються) віртуальними адресними просторами: простір режиму користувача займає нижню частину (адреси з по), простір режиму ядра займає верхню (адреси з по);
  • Різними привілеями доступу коду до ресурсів (пам'яті, процесору, пристроїв та ін).

У режимі користувача виконуються такі процеси:

Підсистема Опис
Процеси забезпечення працездатності системи (System Support Processes)
  • Процес входу до системи Winlogon (winlogon.exe)
  • Процес локального сервераавтентифікації lsass (lsass.exe )
  • Процес диспетчера управління службами (services.exe)
  • Процес диспетчера сесій (smss.exe)
  • Процес консолі (conhost.exe)
  • Процес диспетчера локальних сесій (lsm.exe)
  • . . .
Процеси служб/сервісів (Service Processes)
  • Хост-процес для служб (svchost.exe)
  • Процес диспетчера черги друку (spoolsv.exe)
  • Процес управління службою WMI (winmgmt.exe)
  • . . .
Програми (Applications)
  • Додатки користувача (всі програми, що не входять до інших категорій).
  • Диспетчер завдань (taskmgr.exe)
  • Провідник (explorer.exe)
  • Консоль управління (mmc.exe)
  • . . .
Підсистеми оточення (Environment Subsystems)
  • Підсистема Win32 (csrss.exe, kernel32.dll, advapi32.dll, user32.dll, gdi32.dll, ...)
  • Підсистема Linux (lxss.sys, lxcore.sys)
  • Підсистема POSIX (psxss.exe, psxrun.exe, posix.exe, psxdll.dll)
  • Підсистема OS/2 (os2.exe, os2ss.exe, os2srv.exe)
  • Підсистема WOW/WOW64 (wow64win.dll, wow64.dll, wow64cpu.dll)
  • . . .
Інтерфейс до функцій ядра
  • Забезпечує передачу керування в ядро ​​для функцій, яким це необхідно. Підтримується бібліотекою ntdll.dll

У режимі ядра виконуються:

Підсистема Опис
Виконавча система (Executive)
  • Диспетчер введення-виводу
  • Диспетчер процесів
  • Диспетчер потоків
  • Диспетчер віртуальної пам'яті
  • Диспетчер об'єктів
  • Диспетчер PnP
  • Диспетчер харчування
  • Диспетчер вікон
  • . . .
Ядро (Kernel) ініціалізація критичних для системи драйверів етапу завантаження, міжпроцесорна синхронізація, планування та диспетчеризація процесів/потоків/переривань, обробка/диспетчеризація виключень/помилок та деякі інші функції (ntoskrnl.exe, ntkrnlmp.exe, ntkrnlpa.exe, ntkrp.
Драйвери пристроїв (Device Drivers) драйвери фізичних/логічних/віртуальних пристроїв: драйвери файлових систем, мережі, дисків та ін.
Віконна/графічна підсистема (Windowing And Graphics System) Підсистема підтримки вікон та графіки, що забезпечує підтримку функцій графічного інтерфейсу користувача(Graphic User Interface, GUI). (win32k.sys)
Рівень абстрагування обладнання (Hardware Abstraction Layer, HAL) забезпечує незалежність апаратної частини платформи, ізолює компоненти ядра від специфіки апаратного забезпечення. (hal.dll)

Оскільки будь-яка операційна система просто зобов'язана вміти працювати з апаратними засобами, у дистрибутиві (комплекті установки/системних файлах) присутні драйвери ключових компонентів апаратного забезпечення, без яких система буквально втратить доступ до апаратної частини з усіма випливаючими з цього проблемами: не зможе функціонувати або все пройде процедуру власного встановлення. Подано ці "внутрішні" драйвери у вигляді так званої вбудованої бібліотеки драйверів, що видозмінюється за складом від версії до версії, залежно від етапів еволюціонування апаратного забезпечення та ринкових тенденцій. Драйвера зі складу цієї бібліотеки, при необхідності, встановлюються на етапі інсталяції операційної системи залежно від виявлення (ідентифікації) у комп'ютері тих чи інших пристроїв. У загальному випадку, під час інсталяції код модуля виявлення обладнання виконує визначення встановлених у комп'ютері пристроїв і перевіряє у своїй бібліотеці наявність сумісних драйверів. Для тих пристроїв, для яких є системні драйвера, проводиться установка в автоматичному (фоновому) режимі. Тим самим "на виході", після інсталяції операційної системи, ми можемо отримати мінімально-необхідний для функціонування набір системних драйверів, який дозволяє організувати працездатне початкове робоче середовище. Але варто пам'ятати, що обмежуватися вбудованими у дистрибутив драйверами не варто, оскільки для повноцінного функціонування більшості пристроїв можуть знадобитися драйвера, що надаються виробником пристрою.

Залишається відкритим питання: чи справді всі компоненти режиму ядра взаємодіють з обладнанням виключно через рівень HAL? чи є винятки? У Мережі в багатьох джерелах наводяться схеми, на яких драйвера графічного адаптера взаємодіють з відеокартами як би "безпосередньо", в обхід HAL. Наскільки я пам'ятаю, графіці в деяких версіях Windows відводився найвищий пріоритет, тому вона була виділена в окрему категорію пристроїв, що безпосередньо працюють графічним адаптером, і зроблено це з метою прискорення графічного інтерфейсусистеми.

Рівні запитів переривань (IRQL)

Серед ключових внутрішніх механізмів, що визначають функціонування операційної системи Windows, є досить важлива для розуміння принципів роботи драйверів тема, яку обійти навряд чи вдасться стороною. Механізм цей зветься рівня запитів переривань(Interrupt Request Level, IRQ Level, IRQL) і досить складний для розуміння, тому поглиблене його вивчення виходить далеко за рамки матеріалу, що викладається, проте в даній статті ми спробуємо короткого викладу (ну а в майбутньому виділимо під нього окрему статтю). Відверто кажучи, сам я досі плутаюсь у концепції IRQL, тому викладатиму власне розуміння планомірно, крок за кроком, з опорою на знання, отримані на кожному з етапів.
Термін переривання завжди асоціювався у мене з реальним режимом роботи процесора, переносячи за часів операційної системи MSDOS, в якій все було досить просто: існував набір із 256 переривань, доступних через таблицю векторів переривань. Частина цих переривань були апаратними, відповідно генерувалися самостійно з будь-яких зовнішніх апаратурних подій, інші були програмними, відповідно могли викликатися з коду додатків. Записи в таблиці переривань могли бути перевизначені, тобто вектор переривання був доступний для зміни на свій розсуд на власну процедуру обробки. Таких понять, як рівень запитів переривань, не існувало, все було просто і зрозуміло. Однак, з еволюцією процесорів та операційних систем з'явився спочатку захищений режим, а потім уже й Windows, з цього моменту все почало швидко ускладнюватися.
Буквально раптово, у перших версіях Windows 95/NT, з'явилася якась таблиця (що складається з 32 рівнів запитів переривань), рівні якої градуються від найнижчого 0 (passive) до найвищого 31 (high):

Ім'я Клас Призначення Рівень Intel x86-64
HIGH Апаратний Найвищий рівень. Немаскируемое переривання та інші типи. 31
POWER Апаратний Події збою харчування 30
IPI Апаратний Міжпроцесорний сигнал. Сигнали міжпроцесорної взаємодії. 29
CLOCK Апаратний Такт системного таймера 28
PROFILE Апаратний Контроль продуктивності. Таймер профілювання ядра (механізм виміру продуктивності системи). 27
DEVICE Апаратний DIRQL (Devices IRQL). Апаратні переривання пристроїв. 3-26
DISPATCH Програмний Операції планувальника/відкладені дзвінки процедур (DPC). 2
APC Програмний Асинхронні дзвінки процедур. 1
PASSIVE Програмний Пасивний рівень. Немає переривань. Звичайний рівень виконання коду режиму користувача 0

Як можна помітити, у наведеній таблиці є дуже цікавою особливістю: разом зведені і програмні та апаратні рівні (0-2 це програмні рівні, а з 3-31 це апаратні).

IRQL – власний програмний атрибут, введений розробниками Microsoft. Жодної апаратної підтримки з боку процесора у цього механізму немає. Система самостійно керує всіма типами переривань, що виникають через механізм відображення рівнів переривання апаратного контролера переривань (PIC) і власних програмних рівнів в єдину апаратно-незалежну таблицю рівнів переривань.

З цього твердження випливає, що модель власна, програмна, і рівні в ній не прив'язані до будь-якої специфікації обладнання, це дозволяє системі зібрати в єдину ієрархію пріоритетів апаратні та не апаратні типи переривань. Нижчі (не апаратні/програмні) рівні IRQL (PASSIVE, APC, DPC/DISPATCH) використовуються для синхронізації програмних підсистем операційної системи: запуску операцій планування, таких як перемикання потоків або обробка завершення вводу/виводу. Давайте розглянемо їх докладно:

  • 0-й (нижчий) пріоритет IRQL (PASSIVE):є типовим рівнем запиту переривань, на якому проводиться робота в операційній системі, як в режимі користувача, так і в режимі ядра. Код (програма), що виконується на даному рівні, може бути елементарно перерваний (витіснений) усім, що завгодно: наприклад потоки, що виконуються з рівнем IRQ PASSIVE піддаються витіснення планувальником після закінчення кванта часу, виділеного для них.
  • Рівні IRQL APC та DPC/DISPATCH - програмні рівні переривань, пов'язані з планувальником.
  • 1-й рівень IRQL (APC):На цьому рівні виконуються так звані APC-процедури, тобто процедури, що виконуються асинхронно в контексті конкретного потоку, тобто організують асинхронне введення-виведення, або звертаються / чекають звільнення будь-яких (зовнішніх, світових) системних об'єктів. Використання APC-функцій (наприклад WaitForSingleObjectEx) у коді не призводить до миттєвого виконання функції, натомість потік (в контексті якого функція виконується) переходить у спеціальний статус та генерується програмне переривання APC, виклик функції ставиться у внутрішню чергу. Наступного разу, коли настав час виконувати цей поток, то запланована APC-функція виконується на рівні APC. Потоки, що працюють на рівні APC, відповідно не отримують запити свого рівня АРС, які система використовує для операцій завершення вводу/виводу.
  • 2-й рівень IRQL (DPC/DISPATCH):
    • використовується для обробки відкладених дзвінків процедур (Deferred procedure call, DPC): Відкладені дзвінки процедур - це підпрограми зворотного дзвінка, які відкладені для виконання до того моменту, коли відбудеться перемикання на рівень IRQL DISPATCH; Зазвичай DPC запитуються з високих рівнів IRQL з метою здійснення додаткової роботи, для якої процесорне час не критично. Це досить важлива для продуктивності стадія, і зараз поясню чому. Драйвери пристроїв намагаються виконувати мінімально-можливу кількість операцій усередині власних підпрограм обробки переривання (ISR), щоб не займати тривалий час на рівні DIRQL, тим самим не блокуючи решту переривань і не гальмуючи у результаті всю систему.

      Що рівень IRQL, тим менше можливості процесу. Це спонукає розробників на високому рівні IRQL виконувати тільки найнеобхідніші операції, а всі інші дії робити на низькому.

      Якщо драйвер розуміє, що потрібно виконання додаткової роботи, яка займає значний процесорний час, він запитує DPC і перекладає нього це завдання. Коли рівень IRQL опускається до DISPATCH, відбувається зворотний виклик відкладеної функції драйвера, яка і виконує частину обробки, що залишилася. Реалізуючи подібний алгоритм на рівні IRQL DISPATCH, драйвер проводить на рівні DIRQL меншу кількість часу, і, відповідно, зменшує час затримки на обробку власного переривання, тим самим звільняючи його для інших пристроїв системи.

    • використовується для виконання завдань планувальника: Як ви знаєте, в операційних системах лінійки Windows NT реалізована витісняюча багатозадачність, яка означає, що кожному процесу, що виконується в операційній системі, виділяється для виконання певний час. Оскільки IRQL планувальника потоків і DPC дорівнює 2, він вище пріоритету користувацьких потоків (виконуваних лише на рівні 0). У свою чергу, пріоритет планувальника нижче ніж пріоритет апаратних переривань (переривань від пристроїв), тобто він може бути перерваний апаратними перериваннями.

Добре, але я так і не зрозумів, чому не можна було відмовитись від усіх цих рівнів і зробити "плоску" модель черг, або виконувати всі ці типи завдань у міру надходження? Давайте змоделюємо робочу ситуацію:
представимо будь-який код, наприклад невелику програму, написану "на коліні". Ось ми запустили її на виконання, відповідно до системи сформувався процес для нашої програми, у контексті якого почав виконуватись основний потік. Типовий потік (режим користувача або режиму ядра) виконується на найнижчому рівні IRQL PASSIVE. Протягом усього часу виконання потоку, годинник (мікросхема таймера) періодично генерує власні переривання для відліку часових інтервалів, які використовуються для вказівки операційної системи про проходження заданого проміжку часу. Процедура обробки переривання годинника виконується на рівні IRQL CLOCK, який (якщо подивитися в таблицю) вище за пріоритетом більшості рівнів: і рівня DISPATCH, на якому виконується планувальник, і рівня PASSIVE, на якому виконується наша програма. Таким чином, таймер постійно витісняє роботу і планувальника і нашої програми. З кожним переданим тиком таймера, процедура обробки переривання таймера зменшує той, що залишається у виконуваного в Наразінашого користувача потоку квант часу. У момент, коли квант часу виконується потоку зменшується до нуля, програма обробки переривання годинника генерує переривання рівня DISPATCH, тим самим викликаючи запуск планувальника для вибору ним наступного потоку для виконання. За фактом генерування переривання рівня DISPATCH процедура обробки переривання таймера закінчує виконання свого коду і управління повертається ядру системи. Ядро знаходить у черзі запитів наступне переривання з найбільш пріоритетним рівнем, що у режимі очікування. Кожне переривання обслуговується по черзі. Коли всі переривання вище рівня DISPATCH обслужені, виконується процедура обробки переривання рівня DISPATCH. Ця програма обробки переривання обробляє список DPC, а потім викликає планувальник. Планувальник виявляє, що квант часу поточного потоку вичерпано, тобто зменшено до нуля, після чого Планувальник виконує алгоритм планування для вибору наступного потоку на виконання. Код поставленого виконання потоку буде виконано коли система опуститься на рівень IRQL PASSIVE.
Таким чином реалізується пріоритети, і, відповідно, витісняюча багатозадачність. Тепер уявіть, що ви приберете із системи ієрархію рівнів запитів переривань, як у цьому випадку поводитиметься система? У цій ситуації було б незрозуміло що і коли виконувати, система виконувала б всі завдання, що надходять у порядку черги, що призвело б до того, що потоки запросто могли б витіснити планувальник і тим самим взагалі зруйнувати або повністю вивести зі стоячи витісняючу багатозадачність, що спричинило б у себе непередбачувану роботу ОС. Таким чином:

IRQL - рівень апаратно-програмної пріорітизації, що використовується для синхронізації в операційних системах сімейства Windows, тобто рівні IRQL є основним методом, що використовується для вибудовування за пріоритетами всіх дій, що виконуються в операційній системі Windows протягом циклу роботи.

відповідно:

IRQL вказує пріоритет коду, що виконується на процесорі стосовно переривань та інших асинхронних (раптових) подій.

Призначення рівнів IRQL у системі такі:

  1. Маскування: підвищення рівня переривання дозволяє відрізати (замассувати) нижчі рівні апаратних переривань на контролері PIC. Це дозволяє тимчасово проігнорувати переривання, що виникають нижчих рівнях, цим виграючи час виконання процедури обробки апаратного переривання цьому рівні.
  2. Апаратна синхронізація: синхронізація даних між потоками, що виконуються на різних процесорах/ядрах багатопроцесорної системи.
  3. Програмна синхронізація: для визначення коли різні APC/DPC-процедури можуть бути обслужені, для визначення коли можуть бути обслужені програми користувальницького режиму.

Таким чином, на глобальному рівні механізм IRQL дозволяє підпрограмі операційної системи:

  • Керувати повторною вхідністю (реентерабельність)
  • Гарантувати, що може продовжувати роботу без пріоритетного переривання (витіснення) деякими іншими діями.

Синхронізація процесів - це механізм, що дозволяє забезпечити цілісність будь-якого ресурсу (файл, дані у пам'яті), що він використовується декількома процесами чи потоками у випадковому порядку.

Ну, добре, а як це впливає на драйвера? Ми знаємо, що драйвера можуть бути користувальницького режиму і режиму ядра, відповідно, виконуються в режимі користувача і в режимі ядра. Звідси слідує що:

Код драйвера може виконуватись на різних рівнях IRQL.

І звідси випливають два досить важливі висновки:

  1. Код драйвера є витісняється і переривається. Як і будь-який інший код у системі, він може бути перерваний у будь-який момент після закінчення виділеного кванта часу;
  2. Код драйвера повинен використовувати ті чи інші набори системних функційзалежно від рівня IRQL, де він виконується.

Уявіть ситуацію, коли код драйвера виконується на низькому рівні IRQL, модифікує якийсь об'єкт (наприклад, файл file.txt ), потім інший код на вищому рівні IRQL раптово перериває його виконання і модифікує той самий файл file.txt іншими даними. Коли керування повернеться до драйвера, він продовжить модифікацію файлу своїми даними, тим самим затерши дані, що надійшли від іншого джерела. Таким чином, файл увійде в неузгоджений стан. Для вирішення подібних проблем було введено різні системні об'єкти синхронізації. Для того, щоб код рівня ядра міг модифікувати певні типи даних, об'єкти взаємного виключення, він повинен спершу отримати володіння блокуваннями.

Концепція драйвера

Ядро Windows не проектувалося для самостійної взаємодії з пристроями.

Відповідно висновки, що випливають із цього твердження, очевидні: для взаємодії системи з пристроями потрібні окремі інтерфейси, можливо навіть складна сукупність кількох інтерфейсів. Концепція драйвера була розроблена для вирішення завдання сполучення та використовується в моделях більшості сучасних систем, вона заснована на роботі в адресному просторі ядра спеціального коду, що забезпечує взаємодію ядра системи з будь-яким типом логічних/фізичних пристроїв.
Враховуючи загальну орієнтованість ресурсу, у статті висвітлюватимемо специфіку виключно драйверів операційної системи Windows. Отже, для драйвера Windows, Як, загалом, драйверів інших операційних систем, вірні такі твердження:

Драйвер (Driver) - програмне забезпечення, за допомогою якого операційна система (призначені для користувача програми, ядро ​​та інші компоненти) отримують доступ до функціонала якогось фізичного або логічного пристрою.

те саме, але іншими словами:

Драйвер - інтерфейс між кодом режиму користувача, режиму ядра і функціями фізичного/логічного/віртуального пристрою.

Одне з наведених визначень наголошує на важливості драйвера: помилково представляти драйвер виключно у взаємодії з фізичним пристроєм, оскільки драйвер не обов'язково повинен надавати доступ до функцій будь-якого обладнання, він може забезпечувати і виключно програмні функціональні особливості. Прикладами подібних рішень є драйвера, які встановлюються в систему антивірусами, системами шифрування даних, системами моніторингу. Загальний алгоритм роботи будь-якого драйвера наступний: програми за допомогою функцій спеціального інтерфейсу користувача (у Windows це API Win32) або запитів введення-виводу опосередковано/безпосередньо звертаються до функцій драйвера якогось пристрою. Драйвер, у свою чергу, надає доступ до функціональних особливостей пристрою, що цікавить, а так само контролює процес взаємодії між запитами додатків і безпосередньо пристроєм. Природно, що в драйвері повинні бути визначені (описані) всі принципи взаємодії з пристроєм, що обслуговується (підлеглим, власним), повинен бути присутнім набір даних про керований об'єкт, інструкції (набір команд), за допомогою яких системний/користувацький код може коректно ініціалізувати пристрій і почати з ним взаємодія.

Завантаження драйверів під час запуску операційної системи

Дуже цікаво було б побачити, на якій стадії завантаження операційної системи починає завантажуватися і починає виконуватися перший драйвер Windows? Однак у детальному викладі процес цей досить нетривіальний і для глибокого розуміння вимагає реверсингу коду багатьох компонентів завантаження, на додаток до всього необхідно враховувати безліч супутніх моментів, як-от: послідовність завантаження, обумовлену залежністю між драйверами, через яку драйвера можуть групуватися в так звані " групи завантаження", саме завантаження драйверів може розділятися на кілька етапів та інше. При цьому, слід врахувати, що в Мережі є велика кількість матеріалів щодо застарілих вже операційних систем, тому ми спробуємо актуалізувати процес завантаження драйверів Windows на прикладі (найближчої мені по духу) операційної системи Windows 7. І для початку не завадило б розповісти про основні компоненти ядра Windows, що беруть активну участь у процесі завантаження драйверів:

  • Диспетчер (менеджер) вводу/виводу (I/O Manager)- модуль режиму ядра, що входить до складу виконавчої підсистеми, керує процесами вводу/виводу, що забезпечує абстракцію фізичних і логічних пристроїв для додатків користувача і системних компонентів, що пов'язує програми користувальницького режиму з драйверами. Контролює стадії процесу взаємодії із драйверами. Весь обмін даними менеджера введення-виводу з драйверами здійснюється через звернення до процедур зворотного виклику драйвера (callback) і передачі стандартизованої структури даних IRP, в якій описана вся суть звернення до драйвера;
  • Диспетчер (менеджер) Plug-and-Play (PnP Manager)- модуль режиму ядра і режиму користувача, що входить до складу виконавчої підсистеми, що відповідає за додавання, розпізнавання, видалення пристроїв в операційній системі. Частина режиму ядра взаємодіє з іншими компонентами системи та драйверами у процесі установки (завантаження) програмного забезпечення, необхідного для обслуговування наявних у системі пристроїв. Частина режиму користувача відповідає за взаємодію з програмами режим користувача (для інтерактивної взаємодії з користувачем) у ситуаціях, що вимагають встановлення нових драйверів або налаштування робочих параметрів у існуючих. Управляє розподілом апаратних ресурсів у системі, так само вміє розпізнавати пристрої, реагувати на їх підключення/вимкнення, завантажувати відповідні драйвера для виявлення нових пристроїв;
  • Диспетчер (менеджер) управління службами (Service Control Manager, SCM)- системний процес, відповідальний за створення, видалення, запуск та зупинку служб та драйверів операційної системи. Також забезпечує: функціонування журналу подій, підтримку технології віддаленого виклику процедур (remote procedure call, RPC);

Ці два менеджери, тобто менеджер введення-виводу та менеджер PnP, активно взаємодіють між собою.
Тепер ми опишемо процес завантаження операційної системи, проте зробимо це не у звичній нам формі, а коротко відзначимо ключові моменти, що стосуються роботи описаних компонентів операційної системи з драйверами:

  1. Bootmgr(.efi) завантажує модуль winload(.efi) та передає йому управління.
  2. Winload(.efi) сканує кущ реєстру HKEY_LOCAL_MACHINE\System\servicesта отримує список усіх встановлених у системі драйверів. У цьому кущі реєстру присутні розділи, що зіставляються з кінцевими драйверами, в них присутні різноманітні параметри, що відносяться до драйверів, такі як Group , Start , Type , LoadOrderGroup , DependOnGroup , DependOnServices , що визначають ті чи інші кри.
  3. Winload(.efi) завантажує драйвера, критичні для початкової стадії завантаження/функціонування операційної системи, такі як драйвер контролерів накопичувачів, драйвер файлових систем. Очевидно, що подібні драйвера мають найвищий пріоритет, оскільки створюють базис для завантаження інших драйверів, тому внаслідок цих і інших причин повинні бути в пам'яті в момент передачі управління ядру. Відповідно, маркуються вони спеціальним типом SERVICE_BOOT_START. Драйвера на даному етапіпочинають завантажуватися залежно від груп, яких вони належать.
  4. Winload(.efi) завантажує безпосередньо ядро ​​з файлу ntoskrnl.exe та передає йому керування.
  5. Ядро завантажує Менеджер вводу-виводу та PnP-менеджер.
  6. Менеджер вводу-виводу створює глобальний каталог. Цей каталог використовується для реєстрації об'єктів пристроїв.
  7. PnP-менеджер стартує драйвера, вже завантажені на згадку на попередньому етапі (мають тип SERVICE_BOOT_START), викликаючи процедуру DriverEntry кожного драйвера. На цьому етапі завантажуються і залежні драйвера.
  8. PnP-менеджер будує дерево пристроїв системи, обходить його з кореня і завантажує драйвера пристроїв, які ще не були завантажені.
  9. PnP-менеджер завантажує драйвера пристроїв, що залишилися незавантаженими, незалежно від значення параметра Start . Багато подібних драйверів мають тип SERVICE_DEMAND_START .
  10. PnP менеджер завантажує драйвера розширеного функціоналу. До таких драйверів відносяться драйвер відеоадаптера, драйвера зовнішніх пристроїв, драйвера стека TCP/IP. Такі драйвери мають тип SERVICE_SYSTEM_START.
  11. Ядро завантажує Менеджер (диспетчер) керування сеансами/сесіями (Session Manager Subsystem Service, SMSS), який, у свою чергу, завантажує Менеджер (диспетчер) керування службами (SCM). SCM сканує кущ реєстру ( HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services) та на основі отриманої інформації монтує внутрішню базу даних служб/драйверів, формує програмний інтерфейс для обслуговування встановлених служб/драйверів. SCM завантажує "автозапуск" не-PnP драйвера (мають тип SERVICE_AUTO_START), а також всі драйвера, від яких вони залежать.

З усього цього алгоритму завантаження драйверів нам необхідно усвідомити такі основні правила: драйвер може бути завантажений (залежно від стадії/класу драйвера) за допомогою PnP-менеджера або за допомогою SCM, а ось у процесі функціонування драйвера активно бере участь Менеджер введення-виводу .

Структура драйвера Windows

На що може бути подібний драйвер по структурі? Невже це якийсь особливий клас програм, влаштованих суто специфічно? Я теж так колись за наївністю вважав, але якщо подумати, то з якого дива розробникам операційної системи ускладнювати собі життя і винаходити новий спеціалізований формат образу файлу для якихось ядерних компонентів? Набагато простіше адаптувати старий, давно вже налагоджений та сто разів перевірений.

Драйвер - це свого роду "бібліотека режиму ядра", звичайний файл DLL, у якого в PE-заголовку (структура IMAGE_NT_HEADERS, підструктура OptionalHeader) значення поля Subsystem = 1 (IMAGE_SUBSYSTEM_NATIVE).

Тип підсистеми може бути заданий при складанні модуля, що виконується. Сама по собі нативна підсистема характерна для додатків, які функціонують за іншими, відмінними від класичних, правилами: на стадії підготовки образу до виконання їм не потрібна ініціалізація підсистеми Win32. Серед інших підсистема native використовується для коду режиму ядра, яким і є майже всі драйвера.

За аналогією з DLL, спрощено можна розглядати драйвер як набор процедур (викликаних зовнішніми програмами), кожна з яких призначається для обробки певного типу звернень до драйвера.

Зробимо невеликий відступ та поговоримо про таке поняття як об'єкт. Справа в тому, що весь процес функціонування драйвера Windows, як будь-яких інших модулів операційної системи, залежить від різноманітних системних структур даних. Ці структури управляються ядром і можуть містити в собі потоки, події, запити введення-виводу, пристрої та інші сутності.

  • Об'єкти. Блоки даних, що містять записи властивостей тієї чи іншої сутності операційної системи. Керуються диспетчером (менеджером) об'єктів. Багато об'єктів мають дескриптори (описувачі), з яких об'єкт стає доступним додатків.
  • структури даних. Блоки даних, що містять записи властивостей тієї чи іншої сутності операційної системи. Управляються ядром. Відрізняються від об'єктів, проте (за інерцією) також називаються об'єктами

Тому (з великим натягом) усі внутрішні структури операційної системи Windows називають об'єктами.
Тепер повернемося до процедур драйвера, насправді так звані "процедури" драйвера є COM-об'єктами зворотного виклику, які обробляють події, що надходять від відповідних об'єктів інфраструктури операційної системи, говориться що драйвер надає ядру операційної системи COM-інтерфейс, заданий серією процедур, що реалізуються драйвером. Експорт, тобто публікація (оголошення) процедур драйвера для подальшого звернення до них ззовні, виконується шляхом реєстрації в основній процедурі драйвера (стандартної для всіх драйверів), що має назву DriverEntry.

Основне призначення функції DriverEntry полягає в тому, щоб розробник драйвера реалізував у ній заповнення об'єкта (записів структури) драйвера вказівниками на різні внутрішні процедури драйвера, що забезпечують той чи інший функціонал. У процедурі DriverEntry можна задавати (змінювати) ім'я об'єкта пристрою, яке згодом використовується програмами для відкриття дескриптора пристрою та надсилання пакетів запитів вводу-виводу (IRP).

Функція DriverEntry фактично є функцією глобальної ініціалізації і виконується один раз на етапі завантаження драйвера. Ця функція може бути як гранично простий, так і містити розширений функціонал (додаткові підпрограми), такий, наприклад, створення додаткових об'єктів пристроїв, опитування пристрою, додаткові фази конфігурації та ініціалізації пристроїв(а).
Після публікації своїх функцій драйвер стає " видимим " ядром операційної системи. Щоб не ускладнювати і так досить складну теорію, будемо вважати, що з погляду ядра Windows будь-який пристрій є абстрактним "віртуальним пристроєм", що оперує стандартизованим набором команд, і доступним через внутрішні інтерфейси. Як вже було сказано вище, в ядрі операційної системи Windows присутній спеціальний модуль виконавчої системи, званий диспетчером (менеджером) введення-виводу, що забезпечує єдиний інтерфейс взаємодії всім драйверів режиму ядра, включаючи драйвери фізичних пристроїв, драйвери логічних пристроїв і драйвери файлових систем. Відповідно, система введення-виведення ядра керує драйверами, або можна сказати, що драйвери використовують інтерфейс диспетчера введення-виводу для забезпечення функціонування в операційній системі. З іншого боку, драйвер забезпечує перетворення (конвертацію) "стандартних команд", що надходять від операційної системи, в команди, які "розуміє" підконтрольне йому пристрій (якщо воно є), і навпаки. Менеджер введення-виводу визначає набір (безліч) стандартних процедур, які можуть бути реалізовані в драйвері, оскільки:

Драйвер містить набір процедур зворотного дзвінка, які забезпечують різні стадії процесу введення-виводу.

Для глибшого розуміння того, які функціональні особливості має забезпечувати драйвер, давайте наведемо загальну схему ключових процедур драйвера:

Власне, дивлячись на наведену схему, стає зрозуміло, які види взаємодії, а саме групи процедур повинен реалізовувати абстрактний драйвер Windows. Давайте тепер перерахуємо деякі з цих процедур:

  • Ініціалізація - Менеджер введення-виводу запускає процедуру ініціалізації (називається DriverEntry), яка призначається для проведення дій з початковому налаштуванніоб'єкта драйвера, реєстрації всіх інших процедур драйвера, конфігурування підлеглого пристрою та виконання інших дій на користь розробника.
  • Додавання пристрою - додати (додатковий) об'єкт "пристрій". У цій процедурі драйвер зазвичай створює об'єкти "пристрій" для кожного пристрою, який обслуговується драйвером. Зазвичай використовується для драйверів Plug-and-Play.
  • Обробка – набір процедур диспетчеризації (обробки різних станів). Відкриття, закриття, читання, запис у пристрій, обробка станів живлення, подій PnP та станів системи, а також деякі інші види взаємодії описуються в процедурах диспетчеризації. Фактично це основні процедури, оскільки через процедури диспетчеризації обробляються типові операції вводу-виводу.
  • Запуск (початок) введення-виводу - друга стадія обробки запиту введення-виводу до пристрою, що безпосередньо починає введення-виведення пристрою. Ця процедура може використовуватися для початку передачі даних із пристрою.
  • Процедура обслуговування переривання - коли пристрій генерує переривання, диспетчер переривань передає керування цією процедурою.
  • Обробка відкладених викликів процедур - Процедура DPC перебирає основну роботу з обробці переривання після виконання ISR. Відкладені виклики процедур виконуються на низьких рівнях IRQL (DPC/DISPATCH), ніж сама процедура ISR. Реалізується подібний алгоритм для запобігання блокуванню інших переривань.
  • Процедура завершення вводу-виводу - багаторівневий драйвер може мати процедури завершення вводу-виводу, які повідомляють про завершення обробки IRP низькорівневим драйвером.
  • Процедури скасування введення-виводу - якщо операції вводу-виводу можуть бути перервані, драйвер може визначити одну або кілька подібних процедур. Коли драйвер отримує пакет IRP для запиту введення-виводу, який може бути скасовано, він призначає процедуру скасування IRP, і пакет IRP проходить через різні стадії обробки, які ця процедура може змінити або прибрати, якщо поточна операція не скасовується.
  • Процедура швидкого відправлення - Драйвера, які активно використовують Менеджер кеша, такі як драйвера файлових систем, зазвичай надають подібні процедури для забезпечення можливості обходу ядром типових алгоритмів обробки вводу-виводу.
  • Процедура вивантаження - повинні бути реалізовані в кожному драйвері, який працює (звільняють/займають) із системними ресурсами, для того, щоб Диспетчер введення-виводу вивантажити драйвер із пам'яті.
  • Процедура попередження про завершення дозволяє драйверу звільнити всі займані ресурси при завершенні роботи системи.

Стає очевидним, що в процесі розробки драйвера Windows не стоїть завдання реалізувати весь набір описаних вище процедур, кожен драйвер є унікальним і розробник вільний забезпечувати власний набір реалізацій, що підтримуються драйвером. Коли драйвер за допомогою PnP-менеджера або SCM завантажується в систему, диспетчер вводу-виводу створює у просторі імен об'єкт "драйвер" (driver object) і викликає процедуру ініціалізації драйвера (зазвичай це DriverEntry), яка виконує подальші дії з ініціалізації.

Об'єкт драйвера є образом завантаженого драйвера в пам'яті ядра і через даний об'єкт система управляє драйвером.

Об'єкт драйвера представляє код і дані драйвера в ядрі: крім іншого через цей об'єкт драйвер експортує точки входу своїх процедур. Процедура ініціалізації драйвера записує в атрибути даного об'єкта точки входу всіх процедур драйвера, що експортуються. Після завантаження драйвер може створювати об'єкти "пристрій" для представлення пристроїв або навіть формування інтерфейсу драйвера. Більшість драйверів створюють об'єкти "пристрій" таким чином:

  • PnP-драйвери створюють об'єкти "пристрій" за допомогою своїх процедур додавання пристроїв, коли PnP-менеджер інформує їх про наявність керованого ними пристрою.
  • не-PnP-драйвери створюють об'єкти "пристрій" під час виклику менеджером введення-виведення їх процедур ініціалізації.

При створенні об'єкта типу "пристрій" (device) драйверу потрібно присвоїти даному об'єктуім'я. Потім цей новостворений об'єкт поміщається у простір імен диспетчера об'єктів(Object Manager), який, як і диспетчер (менеджер) вводу-виводу, є частиною виконавчої підсистеми ядра. Менеджер об'єктів призначається ведення бази всіх ресурсів операційної системи, представлених як об'єктів. Ім'я об'єкта може визначатися самим драйвером у явному вигляді, або автоматично генеруватися менеджером вводу-виводу. За угодою, об'єкти "пристрій" повинні розміщуватися в каталозі \Device простору імен менеджера об'єктів, недоступному програмам через Win32 API. А для того щоб об'єкт "пристрій" став доступним для додатків, драйвер повинен створити в каталозі \GLOBAL?? символьне посилання на ім'я цього об'єкта в каталозі \Device. Драйвери, що не підтримують технологію Plug-and-Play, та драйвери файлової системи зазвичай створюють символьне посилання із загальновідомим ім'ям (скажімо, \Device\VMwareKbdFilter). Тільки після всіх перерахованих дій драйвер стає "бачений" в системі і доступний для виклику програмами користувача.

Взаємодія із драйвером

Яким чином користувальницька програма може взаємодіяти з драйвером у системі? На цей випадок є два способи:

  1. Неявний - виклик типової функції Win32 API;
  2. Явний - прямий запит на введення-виведення до драйвера;

Ну з першим випадком все досить просто, прикладної програмивикликається будь-яка ординарна функція Win32 API (наприклад, CreateFile), яка потім, залежно від цільового об'єкта (файлу, каталогу) може викликати в ланцюжку своїх викликів функцію обміну з драйвером. Фактично, в цьому випадку код програми не ставить своїм завданням взаємодіяти з будь-яким драйвером, просто по ланцюжку викликів процедур, на певному етапі виконання йде в режим ядра і відбувається виклик функції драйвера. Все це залишається прихованим від розробника, але можна відстежити взаємодію за допомогою налагоджувальних засобів.
Другий випадок більш цікавий, він виникає коли під викликом драйвера мається на увазі не опосередкований виклик (за допомогою виклику типової функції), а передача за допомогою спеціальної функції (наприклад, DeviceIoControl) так званого запиту введення/виводу (I/O control request), який, надалі, ініціює формування блоку даних під назвою пакета запиту введення-виводу.

Пакет запиту вводу-виводу (IRP, I/O Request Packet) - структура даних ядра Windows, що містить інформацію, що описує запит введення-виводу.

Формально IRP це пакет, але це об'єкт ядра, тобто структура (блок) даних з набором процедур для менеджера вводу-вывода, що забезпечує обмін даними між програмою і драйвером, або між драйвером і драйвером. Як ми вже згадували, архітектура Windows побудована таким чином, що в ній заборонено пряму взаємодію програми режиму користувача та драйвера, тому подібний обмін зводиться до посилки програмою коду IOCTL, який вже призводить до формування менеджером введення-виводу IRP пакета запиту. Саме менеджер вводу-виводу як відповідальний за взаємодію з драйверами оперує пакетами IRP. Менеджер введення-виводу виходить запит на введення-виведення від програми користувача, потім формує IRP і передає його відповідному драйверу.
Пакет IRP складається із двох частин:

  • постійної частини;
  • стека розміщення вводу-виводу.

У постійній частині IRP містить старший та (не завжди) молодший код функції. Старшие коды: IRP_MJ_CREATE , IRP_MJ_CLOSE , IRP_MJ_READ , IRP_MJ_WRITE , IRP_MJ_CLEANUP , IRP_MJ_DEVICE_CONTROL , IRP_MJ_INTERNAL_DEVICE_CONTROL , IRP_MJ_SCSI , IRP_MJ_SYSTEM_CONTROL , IRP_MJ_POWER , IRP_MJ_PNP , IRP_MJ_SHUTDOWN . Пакет також містить стек розміщення вводу-виводу - спеціальну структуру IO_STACK_LOCATION , що містить певні параметри: це набір пристроїв, які оброблять цей пакет IRP. Причому стеку цей пакет передається послідовно від пристрою до пристрою. Більше ніж одне розміщення стека говорить про те, що IRP може бути оброблений кількома драйверами. "Комірки стека" IRP і призначені для зберігання "змінної" інформації при ходженні пакету IRP по стеку драйверів. Пакет IRP проходить за опублікованими процедурами кожного драйвера, кожна з яких витягує зі "своєї" комірки стека розміщення вводу-виводу необхідну їй інформацію. Процедури драйвера зазвичай називаються "процедури зворотного виклику" (callback). Як ми вже згадували, функція ініціалізації драйвера DriverEtnry повідомляє ядру (публікує) імена цих процедур і пізніше ядро ​​саме викликає ту чи іншу процедуру за певних обставин.
На відміну від штатної програми драйвер не є класичним процесом зі своїм адресним простором і не має потоку виконання. Натомість, функція драйвера виконується в контексті того потоку та процесу, в якому вона була викликана. Контекст (простір виконання коду) драйвера залежить від того, хто здійснює звернення (викликає) до драйвера. Звернення може бути ініційоване:

  1. Прикладною програмою (програмою режиму користувача). У цьому випадку контекст виконання драйвера точно відомий і він збігається контекстом прикладної програми;
  2. Іншим (стороннім) драйвером. У цьому випадку контекст виконання визначити складніше, він може бути як відомим, так і випадковим, це залежить від контексту виконання функції драйвера, що викликає.
  3. Апаратним/програмним перериванням. У цьому випадку контекст виконання випадковий, оскільки переривання (і, відповідно, перемикання на код драйвера) може статися при виконанні будь-якого коду в операційній системі.

Знову ж таки, на відміну від штатної програми, драйвер не може викликати стандартні функції Win32 API, може лише оперувати доступними в ядрі функціями, які починаються з префіксів Ex.., Hal.., Io.., Ke.., Ks.., Mm.., Ob.., Po.., Ps.., Rtl.., Se.., Zw.. та деяких інших.

Види (типи) драйверів Windows

У процесі еволюціонування та, відповідно, ускладнення драйверної концепції драйвери почали підрозділятися на категорії (або типи) залежно від призначення. Ось основні з них:

  • Драйвери класів(Class driver) – драйвери, розроблені Microsoft для певного класу пристроїв.
  • Драйвери файлових систем(File System Drivers) - драйвери, що реалізують файлові системина різноманітних носіях інформації.
  • Успадковані драйвера(Legacy drivers) - "застарілі" (сумісні за структурою зі старими версіями ОС) драйвери режиму ядра, що самостійно безпосередньо контролюють підлеглий пристрій без будь-яких додаткових драйверів пристрою. Чому вони мають таку назву? Це тип драйверів, що зберігся від перших версій ОС лінійки Windows NT.
  • Драйвер шини (Bus driver) - Драйвери, що забезпечують функціонал будь-якої шини комп'ютера (ISA, PCI, USB, IEEE1394 та інших);
  • Фільтруючі драйвери(Filter driver) - драйвери, що використовуються для моніторингу/зміни логіки іншого драйвера шляхом роботи з даними, що проходять через нього.
    • Верхні фільтруючі драйвери(Upper-filter drivers) - підтип драйверів, що фільтрують, що знаходиться вище функціонального драйвера по стеку. Через верхні драйвери, що фільтрують, проходять всі запити, а це означає, що вони можуть змінювати і/або фільтрувати інформацію, що йде до функціонального драйверу, ну і далі, можливо, до пристрою. Прикладами можуть бути фільтр-драйвер, який відстежує/фільтрує трафік, шифрує/перехоплює запити читання/запису. Такі драйвери використовуються у брандмауерах.
    • Нижні фільтруючі драйвери(Lower-filter drivers) - підтип драйверів, що фільтрують, що знаходиться нижче функціонального драйвера по стеку. Через такі нижні фільтруючі драйвери проходить, як правило, менше запитів у порівнянні з іншими фільтруючими драйверами, тому що більшість запитів виконує та завершує сам функціональний драйвер.
  • Функціональні драйвери(Function driver) - драйвери, що функціонують самостійно та визначають всі аспекти, пов'язані з пристроєм.
  • PnP драйвер (PnP Driver) – драйвер, що підтримує технологію Plug-and-Play;
  • Мінідрайвер (мініпорт, міні-клас)(Miniport driver, Minidriver, Miniclass driver) - драйвери, які обробляють завдання, пов'язані з кінцевим пристроєм та використовують драйвера класу для управління пристроєм. Діють як одна з частин пари драйверів, в якій ця категорія діє як драйвера кінцевих пристроїв, що виконує специфічні завдання пристрою.

За рівнем компонетизації драйвери бувають:

  • Однорівневі - обробка вводу/виводу реалізується в рамках одного модуля (драйвера), що виконується.
  • Багаторівневі – обробка вводу/виводу розподіляється між декількома драйверами.

PnP драйвера під Windows поділяються на:

  • Функціональний драйвер
  • Драйвер шини (шинний драйвер)
  • Драйвер-фільтр (фільтр-драйвер)

За режимом виконання драйвери Windows градуються:

  • Драйвер користувача режиму.
  • Драйвер режиму ядра.

Моделі драйверів

Протягом усього часу існування операційної системи розробники намагалися стандартизувати та спростити розробку драйверів. Тому виникли моделі.

Модель WDM

Колись дуже давно існувало два основних напрямки розвитку драйверної концепції Windows:

  1. у Windows 95/98 застосовувалася модель VxD (Virtual Device Driver);
  2. у Windows NT3.51 паралельно розвивалася модель NT-драйвер (драйвер у стилі NT, NT Driver).

Однак, починаючи з версії Windows 98/NT4.0, розробники спробували уніфікувати (універсалізувати) розробку драйверів, внаслідок чого на зміну згаданим моделям прийшла нова модель WDM.

WDM (Модель драйвера Windows, Windows Driver Model) – єдине середовище розробки (фреймворк) для драйверів пристроїв операційної системи Windows. Була створена зменшення коду стандартизації вимог до драйверам.

Модель WDM був етапом перевизначення класичного стека драйвера Windows з метою забезпечення підтримки революційних технологій Plug-and-Play і ACPI. Модель дає можливість завантажувати/вивантажувати драйвери "на льоту", без необхідності перезавантаження операційної системи, розробляти драйвера у вигляді розширень (фільтрів) до стандартних системним драйверам, більш гнучко керувати енергозбереженням та конфігурацією пристроїв та інше.
В рамках моделі WDM будь-яке апаратний пристрійпідтримується, як мінімум, двома драйверами:

  • Функціональний драйвер (Function driver) - відповідальний майже за всі функціональні особливості обслуговуваного пристрою: операції вводу-виводу, обробка переривання та управління пристроєм;
  • Драйвер шини (Bus driver) – відповідальний за обслуговування з'єднання між пристроєм та комп'ютером, фактично підтримкою сполучної шини (наприклад, PCI, USB та інші).

Модель WDF

Протягом усього часу розвитку модель WDM зазнавала безліч змін, істотно розростаючись. Починаючи з Windows Vista, була зроблена спроба розвитку концепції драйвера Windows, по суті вже існуючої на той момент моделі WDM, результатом чого стало нової моделі (надбудови над WDM) під назвою WDF.

WDF (Основа драйверів Windows, Windows Driver Foundation) – середовище розробки (набір інструментальних засобів), що полегшують розробку драйверів пристроїв для операційних систем Windows (Windows 2000 та пізніших).

Пов'язано це було з тим незаперечним фактом, що розробникам не вдалося досягти достатнього рівня абстракції моделі WDM, а саме, недостатньою інтеграцією підсистеми введення-виводу з технологією Plug-and-Play та управлінням живленням. Це призводило до того, що на розробнику драйвера лежало величезне навантаження по синхронізації цих запитів введення-виводу з подіями Plug-and-Play і запитами енергоспоживання. Очевидно, потрібно подальше спрощення драйверної моделі. WDF прийшла на зміну WDM і вважається найсучаснішою моделлю.
WDF реалізує такі можливості:

  1. "Винесення" деяких некритичних до режиму виконання класів драйверів в режим користувача, що дало скорочення загальної кількості збоїв в ядрі.
  2. Більшість обробки взаємодії підсистеми введення-виводу з Plug-and-Play та керуванням електроживленням виконується тепер вбудованими механізмами моделі WDF.
  3. Надання нових внутрішніх інтерфейсів моделі WDF, які дозволяють абстрагуватися від складніших розуміння системних інтерфейсів; У моделі WDM/legacy досить складно реалізувати логіку деяких частин взаємодії з драйвером, не вивчивши всі ази складної архітектури ядра, WDF дозволяє автоматизувати багато видів взаємодії; Велика кількість коду при розробці драйвера WDM тепер може бути замінена викликами процедур WDF.
  4. Можливість створення "канонічного" драйвера. Присутність шаблонів, які надають сторонньому розробнику можливість перевизначення унікальних для драйвера його критеріїв, тим самим скорочуючи час на розробку.

Модель WDF поділяється на два напрямки:

  • UMDF (Kernel-Mode Driver Framework) – середовище розробки драйвера режиму ядра.
  • KMDF (User-Mode Driver Framework) – середовище розробки драйвера режиму користувача.

Підрозділ середовищ за режимами користувача та ядра моделі WDF досить умовне, оскільки основне призначення даного розмежування полягає в класифікації розробки драйверів для тих чи інших класів пристроїв.



Завантаження...
Top