Кои устройства се нуждаят от драйвери. Как да разбера кой звуков драйвер ми трябва

Ако сте сглобили компютъра си сами, купувайки компоненти за него отделно, тогава в този случай всички драйвери за компютъра вече не могат да бъдат намерени на един уебсайт на производителя, както би било лесно да се направи при закупуване на готов компютър (това е описано в статията „Как да намерите драйвери, ако сте закупили лаптоп или готов настолен компютър!“). В крайна сметка вие купувате недовършен компютър, който щеше да принадлежи на някой производител, щеше да има собствен модел и драйвери, за които можете да изтеглите всички наведнъж от един сайт. Тъй като компютърът е сглобен от резервни части, които сте избрали сами, това означава, че той вече няма да отговаря на нито един модел и да принадлежи на някакъв производител, защото това вече е ваше творение :) Следователно ще трябва да търсите драйвери отделно за всички устройства, от които е сглобен компютърът. Това включва и случая, когато след закупуване на готов (вече сглобен) компютър, след известно време сте решили да замените някакво "желязо".

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

За какво е описан драйверът в статията:

И така, вие сами взехте всички компоненти, сглобихте компютъра, инсталирахте Windows и виждате, че драйверите не са инсталирани за всички устройства и може би дори не са инсталирани за почти всички. Можете да разберете дали всички драйвери са инсталирани от стандартната помощна програма Device Manager. Как да направя това, казах в отделна статия.

И за да инсталирате драйвери в този случай, има няколко опции.

Забележка!
Ако дори не сте инсталирали автоматично драйвери за мрежови карти, което не ви дава възможност за достъп до интернет от този компютър, тогава всички стъпки по-долу ще трябва да се извършат от друг компютър с достъп до интернет. И след като изтеглите всички драйвери, ще трябва да ги прехвърлите на желан компютър, например чрез флашка или диск.

Вариант номер 1. Търсете драйвери ръчно по кода на устройството чрез сайта devid.drp.su

Считам този вариант за най-добър. Методът е да се определи кодът на устройството и да се търсят драйвери в Интернет, като се използва този код на различни сайтове.

Да предположим, че в диспечера на устройства виждаме нещо подобно:

Тези. на компютъра не са инсталирани драйвери за няколко устройства. Въпреки това е проблематично да се определи чрез диспечера на устройствата за кои устройства няма драйвери, защото имената са някак замъглени. Може да се разбере само грубо. Например "Ethernet контролер" е най-вероятно LAN картаза кабелна интернет връзка. " Мрежов контролер' вероятно е wifi адаптер, т.е. мрежова карта за достъп до интернет чрез Wi-Fi.

Но всяко устройство има свой собствен уникален номер, който мениджърът на устройства може просто да ни покаже. И след като научихме номера, можем да намерим драйвера за устройството чрез интернет.

Нека да разгледаме няколко примера за това как ръчно да намерите драйвери по код на устройство:

В началото ще намеря драйвер за неясното устройство "Simple Communications PCI Controller".

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

    За да определите кода на устройството, щракнете с десния бутон върху него в диспечера на устройствата и изберете „Свойства“ от менюто, което се появява:

    В прозореца, който се отваря, изберете раздела „Детайли“ и след това по-долу под надписа „Свойства“ изберете „Идентификационен номер на хардуера“:

    Първо се опитваме да търсим по кода от най-долния (4-ти) ред. Щракнете с десния бутон по-долу на 4-тия ред с кода и изберете „Копиране“.

    Опитвам се да намеря драйвер по код на devid.drp.su.

    След като копирате кода, отворете сайта:

    David.drp.su

    Нека се опитаме да намерим драйвера за него. Този сайт принадлежи на програмата Решение за пакет драйвери, който събира почти всички възможни драйвери. Тук с голяма степен на вероятност можете да намерите драйвер за всяко устройство.

    След като отворите сайта, първото нещо, което трябва да направите, е да поставите кода на устройството, копиран в предишната стъпка, в най-горния дълъг ред и да изтриете всичко в този код, което идва от символа „&“ до края.

    Например копирахте кода:
    PCI\VEN_8086&DEV_0166 &CC_0300

    Така че след премахване на знаците от "&" трябва да имате кода:
    PCI\VEN_8086&DEV_0166

    Ако не знаете каква система имате, отворете Търсене в Windowsи въведете там „Системна информация“, след което изберете програмата, която се появява от списъка:

    В програмата, която се отваря, в прозореца вляво изберете "Системна информация" и вдясно в реда "Име на ОС" ще се покаже версията на вашия Windows (в моя пример на изображението по-долу "Windows 10") , а в реда "Тип" - битова дълбочина: x64 или x86:

    Въз основа на тези данни ние посочваме типа и битовата дълбочина на системата на сайта devid.drp.su.

    След като кодът на устройството е посочен и версията на Windows е избрана, щракнете върху бутона „Търсене на драйвери“.

    В резултат на това страницата ще покаже списък с драйвери, които съответстват на посочения от вас хардуерен код и за вашия Windows версии. С помощта на бутона "Изтегляне" изтеглете един от драйверите на компютъра.

    Забележка!
    Ако се показват няколко идентични драйвера (както на изображението по-горе), тогава изтеглете драйвера, който има най-новата дата на пускане в колоната Версия на драйвера.

    С натискане на бутона "Изтегляне" драйверът ще бъде изтеглен на вашия компютър и вие трябва само да го инсталирате. Няма нищо сложно в инсталирането на драйвери и аз засегнах тази точка в отделна статия.

    Забележка!

    Случва се в списъка с драйвери да се показват различни драйвери, например:

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

Както можете да видите, шофьорът не беше труден за намиране. Сега ще разгледам друг пример, за да стане по-ясно :) Например, ще намеря драйвер за устройство, което е обозначено като „Ethernet контролер“ в диспечера на устройствата.

Щраквам с десния бутон върху устройството, отварям свойствата:

В прозореца изберете раздела „Подробности“, изберете елемента „Идентификационен номер на хардуер“ от списъка и копирайте кода от 4-ти ред:

Отварям сайта devid.drp.su, посочвам там копирания номер, изтривам всичко в него, започвайки от символа "&". След това избирам версията на Windows и извършвам търсене:

За моето устройство и версията на Windows, която избрах, има само една версия на драйвера, която мога да изтегля и инсталирам:

Това е всичко!

Все пак понякога се случва сайтът devid.drp.su да не намира драйвери за посочения от вас хардуерен код. В този случай има алтернативен вариант, който ще разгледаме по-долу.

Алтернативен начин за търсене на драйвери по код на устройство

Ако на добре познатия сайт devid.drp.su няма драйвери за устройството, от което се нуждаете, можете да използвате този прост метод:

    Определете кода на устройството. По същия начин копирайте кода на оборудването (4-ти) ред:

    Търсим шофьор в различни сайтове.

    Сега отиваме на уебсайта Google.com и поставяме копирания код директно в лентата за търсене, след което премахваме символа „&“ и всичко, което го следва от кода, например:

    PCI\VEN_8086&DEV_1C3A &SS_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:

    Като отидете на сайта от търсачка, страницата ще покаже списък с вероятно съвместими драйвери с вашето устройство:

    Щракването върху бутона за изтегляне ще се отвори нова страницакъдето голямо количество реклама хваща окото.

    внимание!
    Не кликвайте никъде, ако има много реклами на сайта, бъдете внимателни, в противен случай можете да вземете вируси и други инфекции на вашия компютър!

    В следващия прозорец в центъра ще се появи прозорец, за да потвърдите, че сте реален човек, а не програма :) Трябва да изчакате съдържанието на прозореца да се зареди и да кликнете върху бутона "Покажи":

    Ще се отвори нов прозорец, където отново изчакваме няколко секунди, за да се зареди съдържанието. В прозореца до надписа ще се появи код: "Enter". Този код трябва да бъде пренаписан точно както е в реда по-долу („Вашият отговор“) и щракнете върху „Връщане към страницата“:

    Ще бъдете върнати на оригиналната страница, където сега ще се появи бутонът „Продължи“. Щракването върху него ще започне изтеглянето на драйвера на компютъра:

като този алтернативен начинможете да опитате ръчно да намерите драйвери по кода на устройството. Разбира се, за тази опция показах примери за изтегляне на драйвер само от 2 сайта и има огромен брой от тях. Но принципът на изтегляне на всички сайтове е един и същ. Само интерфейсът се различава в по-голямата си част и понякога редът на изтегляне.

Но аз съм по-склонен, че можете лесно да намерите драйвери, като използвате основния метод, предложен във опция №1.

Вариант номер 2. Търсете драйвери на официалните уебсайтове на производителите на устройства

Ако не можете да намерите драйвери за вашите устройства, като използвате първата опция, това може да стане по този начин.

Ще трябва да потърсите производителя и модела на всяко устройство във вашия компютър чрез тяхната документация или специални програми(например Aida64 или Sysinfo Detector) и след това отделно потърсете драйвери за всяко устройство чрез официалния уебсайт на производителя или (ако няма драйвер на официалния уебсайт) в Интернет според модела на устройството.

Да вземем този пример. В диспечера на устройствата виждам, че драйверът за видеокартата и някакво друго странно устройство не е инсталиран в системата:

Как разбра какво има на видеокартата? Но тъй като ако в списъка с устройства в секцията „Видео адаптери“ има устройство „Стандартен VGA графичен адаптер“, тогава няма драйвер за видеокартата, в противен случай устройството ще има името на вашата видеокарта, например „NVIDIA GeForce GTX980“.

Нека да разгледаме последователността на вашите действия:

    Разберете производителя и модела на устройството.

    Забележка!
    Ако имате „Неизвестно устройство“ в диспечера на устройства, тогава драйверът за някое устройство вероятно не е инсталиран дънна платкаили специална програма за дънната платка. Следователно първо трябва да инсталирате всички драйвери за вашата дънна платка и програми за нея.

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

    Как да инсталирате и използвате програмата Aida64 е описано в статията:

    Как да инсталирате и използвате Sysinfo Detector е описано в статията:

    Ако откриете устройства чрез програмата Aida64след това можете да определите какви устройства без драйвери, като изберете секцията „Устройства\u003e\u003e Windows устройства” и след това вдясно отворете категорията „Неизвестен” (неизвестен). Информация за избраното устройство ще се появи по-долу:

    И така, в моя пример неизвестното устройство се нарича "Asus ATK-110 ACPI Utility".

    Споменах по-горе, че неизвестно устройство най-вероятно е нещо на дънната платка, така че нека веднага да определим коя дънна платка е в устройството. За да направите това, отворете раздела "Дънна платка" и отидете в същия подраздел. Вдясно в прозореца ще видим производителя и модела на дънната платка: Asus P5KPL-AM EPU.

    Сега нека се заемем с видеокартата. Видеокартата обикновено се идентифицира правилно в Aida64 под „Дисплей“ > „Видео PCI/AGP“. Както можете да видите, програмата е открила видеокартата: NVIDIA GeForce GT 430":

    Ако гледате устройства чрез Sysinfo Detector, тогава можете да видите устройства с деинсталирани драйвери по 2 начина. Първият е в секцията "Отклонения":

    Както можете да видите, същото устройство беше открито като чрез програмата Aida64: ACPI / ATK0110

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

    По-добре е да погледнете производителя и модела на видеокартата в раздела "PCI устройства". В списъка намерете подраздела „Контролер на дисплея“:

    От примера се вижда, че производителят на картата е 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 за идентифициране на звуков драйвер

Операционната система на компютъра предлага своята помощ при определяне на правилния звуков драйвер. Необходимо е да насочите курсора към папката "Моят компютър", щракнете десен бутонмишка (RMB), след това "Свойства", след това "Хардуер". Можете да го направите по-лесно: папката „Моят компютър“, щракнете с десния бутон на мишката, отидете в секцията на диспечера на устройствата.

В диспечера на устройствата ще се отвори списък, изберете звукова карта (няма драйвер, има удивителен знак до него). Избираме реда, в горната част има опцията „Актуализиране на драйвера“, след това елемента „Търсене на драйвери“, когато всичко се случи с положителен резултат, ще се предложи прозорецът „Инсталиране“.

Ръчна опция за търсене на звуков драйвер

Когато автоматичният избор на звуков драйвер е неуспешен, трябва да опитате да го намерите ръчно, за това отиваме във всяка търсачка (Google, Yandex). След това в полето за търсене въведете името на вашето звуково устройство на компютъра и добавете „+ драйвер“, в прозореца, който се отваря, изберете това, от което се нуждаете за нас.

Какъв драйвер е необходим за персонален компютър? Това е лесно да се види в раздела Диспечер на устройства. Препоръчително е да изтеглите драйвера на официалния уебсайт на производителя на инсталираната дънна платка (когато звукова картавграден в него). Препоръчва се също да изтеглите драйвера от уебсайт, който е специализиран в актуализирането на този компютърен хардуер.

След като драйверът бъде изтеглен, се връщаме в раздела „Диспечер на устройства“, отваряме „Търсене на драйвери на компютъра“, посочваме мястото, където е записано, „Инсталиране“.

Инсталиране на звуков драйвер с програмата

Има моменти, когато за компютърния потребител е трудно да намери звуков драйвер ръчно и с помощта на операционната система, тогава се предлага специална програма за търсенето му. В момента има няколко програми за тези цели: Driver Checker, Sam Drivers, Device Doctor и други програми.

Работата с интерфейса на програми от този вид е ясна, на интуитивно ниво.

Има различни случаи, в които трябва да определите звуковия драйвер за вашия компютър, съветват експерти:

  • Определете модела на инсталираното звуково устройство на компютъра (четете на компютъра). Може би липсата на звук се дължи на неинсталирано оборудване, което забранява използването му в BIOS.
  • Когато звукът е интегриран в компютъра, се препоръчва да изтеглите звуковия драйвер само от уебсайта на производителя на "дънната платка" или в случая отделна инсталациязвукова карта, за да отпише маркировката на чипа от нея. Намерете необходимия драйвер чрез системата за търсене на маркировки.
  • Препоръчително е да използвате програмата AIDA 64, тя не само ще покаже необходимия звуков драйвер, но и всичко инсталирано оборудване, можете да определите маркировката на чипа.

Разберете как да намерите правилните драйвери, за да стартирате всяко устройство, свързано към вашия компютър без усилие.

Въпреки факта, че 21-ви век вече е в двора и почти всеки има компютри, мнозина ги третират като някакво неприкосновено чудо на технологията. Освен това, твърдо вярвайки, че имат най-добрия компютър (защото продавачът каза така :)), такива потребители не инсталират никакви програми на него и не си правят труда да проверят дали компютърът работи правилно ...

защо съм аз Освен това наскоро трябваше да се справя със случай, когато някои другари почти година и половина след закупуването на компютър нямаха нормален драйвер за видеокарта !!! Оплакването беше обичайното - "" :) И защо да не намали, ако няма шофьор?!

Като цяло днес ще проверим нашите компютри за наличието на всички необходими драйвери в тях ...

Какво е драйвер и как да го инсталирате?

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

Без драйвер свързаното оборудване или изобщо няма да работи (принтери, скенери и друго офис оборудване), или ще работи, но не в най-оптималния режим (видеокарти, чипсети и др.). Ето защо за нормална операцияНе е достатъчно само да преинсталирате системата за компютър, важно е и да намерите драйвери за всички нейни компоненти!

Драйверът може да се достави в три версии:

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

Първата опция за доставка на драйвери най-често се намира в Интернет и на инсталационните дискове, които се доставят с оборудването, което сте закупили. Достатъчно е да изтеглите (или отворите на диск) и стартирате EXE файла и пред нас ще се появи съветникът за инсталиране, който ще ви позволи да конфигурирате всичко стъпка по стъпка. В този случай инсталирането на драйвера не е по-трудно от инсталирането на която и да е програма.

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

Инсталирането на драйвера по третия начин е най-неочевидният. Такива драйвери често се намират за стара технология и не съдържат графичен инсталатор, но включват файл (понякога повече от един) с разширение INF, който съдържа всички инсталационни пътища за библиотечния пакет, за да работи свързаното оборудване:

За да инсталирате драйвера по този начин, трябва да извикате контекстното меню в "Диспечер на устройства" (икона "Компютър" - RMB - "Свойства" (на по-стари системи раздела "Хардуер")) неразпознато устройствои след това изберете „Актуализиране на драйвери“.

Ще се отвори прозорец, от който трябва да отидем по този начин (като щракнете върху съответните бутони): „Търсене на драйвери на този компютър“ - „Изберете драйвер от списъка с вече инсталирани“ - „Инсталиране от диск“ и след това щракнете върху бутона "Преглед" и посочете местоположението на необходимия INF файл:

След като потвърдите избора на INF файла, ще се появи съобщение или за успешна инсталация, или че избраният от вас файл не е подходящ и трябва да изберете друг (ако има такъв). Ако никой от INF файловете не ви позволява да инсталирате правилния драйвер, тогава ще трябва да потърсите алтернативен софтуер или дори да промените хардуера или системата, за да направите устройството съвместимо с вашия компютър.

Е, сега, когато знаете какво е драйвер, защо имате нужда от него и как да го инсталирате, е време да разберете как да намерите драйвери.

Търсете по име на устройството

Всяко устройство (ако не е някакъв неназован китайски занаят) има свое име. Познавайки това име и версията на вашата система, вие в повечето случаи можете да формулирате правилното заявка за търсенеда влезе в търсачка. Например: „шофьор принтер Canon IP1500 за Windows 7 64-bit" или "Radeon HD 8700M драйвер за Windows 8".

Резултатите от търсенето ще съдържат сайтове, от които можете да изтеглите необходимия драйвер. Въпреки това, не всички сайтове могат да изтеглят безплатно! За да избегнете ненужни притеснения поради финанси или инсталиране на софтуер с ниско качество, препоръчвам ви да използвате доказан портал на руски език:

Този сайт съдържа един от пълни колекциидрайвери от целия интернет с общ обем над 300 TB! Тук можете да търсите драйвер както по тип устройство (основен списък „Категории хардуер“), така и по име на производителя (азбучен индекс в горната част на страницата).

На страницата с необходимия компонент ще има няколко опции за изтегляне. Обърнете внимание на полетата „Тип програма“ (там трябва да присъства думата „драйвер“, в противен случай можете просто да изтеглите сервизна помощна програма или добавка), „Описание“ (също така казва за какво е този или онзи файл), а също и "Система". Можете да изтеглите самия драйвер от линка след описанието, потвърждавайки, че не сте робот :)

В допълнение към търсенето на драйвери в специализирани хранилища, понякога има смисъл да търсите в сайтове за разработчици! Например драйверите за популярни видеокарти се актуализират доста често и се изтеглят последна версияМожете, често, само на официалния уебсайт. Затова ще дам малък списък с връзки за изтегляне на страници за драйвери от най-често срещаните заблуди.

Видео карти:

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

Офис техника:

Като изтегляте драйвери от надеждни източници, не е нужно да се притеснявате, че няма да работят или съдържат вируси. Освен това предимството на изтеглянето от официални сайтове е гаранцията, че ще изтеглите най-актуалните и свежи драйвери, които, уви, не могат да бъдат гарантирани при изтегляне от ресурси на трети страни.

Търсене по ID на устройството

Намирането на драйвер по името на вашето устройство е доста проста задача. Но ако самото устройство е от неизвестен производител, тогава не можем да знаем и името му! Ако се сблъскате с такава ситуация, тогава ще ви помогне алтернативен метод за търсене - чрез идентификатор на оборудване.

Всяко устройство, дори вътре системен блок, въпреки че е свързан с външен кабел, има свой собствен идентификатор или ID в системата. Можем да го разпознаем във вече познатия „Диспечер на устройства“, като извикаме „Свойства“ на желания компонент, отидем в раздела „Подробности“ и изберете елемента „Идентификатор на хардуера“ или „Идентификатор“ в падащото меню „Свойство“ списък:

Започвайки с Windows Vista, Можете да копирате стойността на низа на идентификатора в клипборда, като използвате контекстното меню. В по-ранните версии няма функция за копиране, така че ID ще трябва да се пренапише ръчно.

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

За да направите това, щракнете върху бутона „Търсене“ в горния десен ъгъл и поставете копирания идентификационен номер на устройството в полето на страницата, която се отваря, след което не забравяйте да проверите елемента „Търсене по ID“ и щракнете върху бутона „Търсене“ под полето за въвеждане. Сред резултатите, които се отварят, можете лесно да намерите драйвер, подходящ за вашата система, и можете да го изтеглите.

Няколко по-големи портала за търсене на драйвери работят по подобен начин. Най-добрите са DevID.info и DevID.drp.su. Между другото, и двете услуги имат свои собствени клиенти, които ви позволяват автоматично да откривате необходимите драйвери и да ги инсталирате. Ще говорим за такъв специализиран софтуер по-нататък.

Програма за намиране на драйвери

По-горе разгледахме случаи, когато трябва ръчно да търсите драйвери. За това обаче има и специални програми, които ви позволяват да намерите и изтеглите всичко автоматично. Всички те могат да бъдат разделени на два вида.

Програмите от първия тип обикновено са малки (до десет мегабайта) клиентски модули, които ви позволяват да сканирате компютъра си за остарели или деинсталирани драйвери и след това да ги изтеглите от интернет и да ги инсталирате с няколко кликвания. В нашия сайт виден представител на програми от този вид е:

Въпреки това мнозинството подобни решенияима един голям минус: можете да изтеглите само няколко драйвера на ден безплатно. Ако превишите ограничението, или ще бъдете напълно забранени за изтегляне, или скоростта на изтегляне ще бъде намалена до минимум, така че в крайна сметка все пак да закупите премиум акаунт.

Поради тази причина програмите от този тип могат да се използват безплатно само за единична актуализация на драйвери, но не и за групова инсталация на току-що инсталиран Windows. Ако искате всичко наведнъж, вашият избор са шофьорски пакети!

Пакет драйвери (от английски. " драйверен пакет"-" набор от драйвери ") най-често е набор от офлайн база данни с избрани драйвери и шел програма. Програмата сканира вашия компютър, след което предлага да инсталирате или актуализирате няколко драйвера. Просто трябва за да маркирате необходимите и да потвърдите избора си.Инсталацията ще се извърши автоматично!

В необятността на Runet най-пълният и популярен пакет драйвери е:

Към днешна дата размерът на максималния пакет за доставка на този пакет драйвери е повече от 10 гигабайта. Това не е толкова впечатляващо, колкото 30-терабайтовата база данни на Driver.ru, но въпреки това такъв брой драйвери е напълно достатъчен, така че след преинсталиране на системата да не се налага да търсите инсталационни дисковекойто дойде с дънна платка, видео карта и други компоненти на вашия компютър или лаптоп.

Ако не искате да изтегляте 10 гигабайта драйвери, тогава можете да изтеглите Lite версията на DriverPack Online. Това е само програма за сканиране, която определя драйверите, от които се нуждаете, свързва се с онлайн база данни и ви позволява да изтеглите само това, от което се нуждаете.

заключения

Днес намирането на драйвери за компютър и лаптоп не е трудно. Въпреки това, като всяка програма, те се нуждаят от актуализации от време на време, за което много хора забравят. И между другото, актуализациите могат да помогнат много!

Така например от пролетта "" започна да се появява от време на време с оплаквания за някаква DLL библиотека. Известно време търпях това състояние на нещата, но след това се уморих и реших да потърся решение на проблема. Оказа се, че виновникът е грешка в драйвера на видеокартата. След актуализиране на драйвера всичко се подобри и вече няколко месеца "полетът" е нормален :)

Моралът на всичко по-горе е следният: ако внезапно започнете да имате "бъгове" във вашия компютър или те се наблюдават от закупуването на компютъра / преинсталиране на windows, проверете за актуализации на драйвери за критични важни компонентивашия компютър. Ако има такива, опитайте да ги инсталирате и може би системата ви ще заработи отново!

P.S. Разрешено е свободното копиране и цитиране на тази статия, при условие че е посочена отворена активна връзка към източника и е запазено авторството на Руслан Тертишни.

Вероятно всеки, който поне веднъж преинсталира операционната система сам, имаше популярен въпрос: как да разберете кои драйвери трябва да бъдат инсталирани на компютъра за стабилната му работа? Това е въпросът, на който ще се опитаме да отговорим в тази статия. Нека разберем по-подробно.

На теория трябва да инсталирате софтуер за всички устройства, които го изискват на компютър или лаптоп. С течение на времето разработчиците операционна системапостоянно разширяване на базата данни с драйвери на Microsoft. И ако в Windows пъти XP трябваше ръчно да инсталира почти всички драйвери, но в случай на по-нови операционни системи много драйвери вече се инсталират автоматично. Има обаче устройства, за които софтуерът трябва да се инсталира ръчно. Предлагаме на вашето внимание няколко начина, които ще ви помогнат да разрешите този проблем.

Метод 1: Официални уебсайтове на производителите

За да инсталирате всички необходими драйвери, трябва да инсталирате софтуера за всички платки на вашия компютър. Това се отнася за дънната платка, видеокартата и външните платки ( мрежови адаптери, звукови карти и др.). В същото време, в "Диспечер на устройства"може да не показва, че хардуерът изисква драйвери. При инсталирането на операционната система просто се използва стандартният софтуер за устройството. Софтуерът за такива устройства обаче трябва да бъде инсталиран оригинален. По-голямата част от инсталирания софтуер пада върху дънната платка и интегрираните в нея чипове. Затова първо ще потърсим всички драйвери за дънната платка, а след това за видеокартата.

  1. Разберете производителя и модела на дънната платка. За да направите това, натиснете клавишите Win+Rна клавиатурата и в прозореца, който се отваря, въведете командата cmdза да отворите команден ред.
  2. IN командна линиятрябва да въведете командите една по една:
    wmic baseboard get Manufacturer
    wmic baseboard вземете продукт
    Не забравяйте да натиснете "Влез"след всяка въведена команда. В резултат на това ще видите на екрана производителя и модела на вашата дънна платка.
  3. Сега търсим уебсайта на производителя в Интернет и отиваме на него. В нашия случай това е.
  4. В сайта търсим поле за търсене или съответния бутон под формата на лупа. Като правило, като щракнете върху този бутон, ще видите поле за търсене. В това поле трябва да въведете модела на дънната платка и да щракнете "Влез".
  5. На следващата страница ще видите резултата от търсенето. Трябва да изберете вашата дънна платка от списъка. Обикновено има няколко подраздела под името на модела на платката. Ако има раздел "Шофьори"или "Изтегляния", кликнете върху името на такъв раздел и отидете на него.
  6. В някои случаи следващата страница може да бъде разделена на софтуерни подраздели. Ако е така, тогава потърсете и изберете подраздел "Шофьори".
  7. Следващата стъпка е да изберете операционната система и битовата дълбочина от падащия списък. Моля, имайте предвид, че в някои случаи може да има разлики в списъците с драйвери при избор на различна ОС. Затова вижте не само системата, която сте инсталирали, но и версиите по-долу.
  8. След като изберете операционната система, ще видите списък с целия софтуер, от който вашата дънна платка се нуждае, за да взаимодейства с други компютърни компоненти. Трябва да ги изтеглите и инсталирате всички. Изтеглянето става автоматично след щракване върху бутона, Изтеглиили съответната икона. Ако сте изтеглили архива с драйверите, преди да инсталирате, не забравяйте да извлечете цялото му съдържание в една отделна папка. След това инсталирайте софтуера.
  9. След като инсталирате целия софтуер за вашата дънна платка, нека да преминем към видеокартата.
  10. Натиснете клавишната комбинация отново Win+Rи в прозореца, който се показва, въведете командата "dxdiag". Кликнете, за да продължите "Влез"или бутон "ДОБРЕ"в същия прозорец.
  11. В прозореца на инструмента за диагностика, който се отваря, отидете на раздела "екран". Тук можете да разберете производителя и модела на вашия графичен адаптер.
  12. Ако имате лаптоп, трябва да отидете и в раздела "Конвертор". Тук можете да видите информация за втората дискретна графична карта.
  13. След като разберете производителя и модела на вашата видеокарта, трябва да отидете на официалния уебсайт на компанията. Ето списък на страниците за изтегляне на основните производители на графични карти.
  14. На тези страници трябва да посочите модела на вашата видеокарта и операционната система с bitness. След това можете да изтеглите софтуера и да го инсталирате. Моля, обърнете внимание, че е за предпочитане да инсталирате софтуера за графичния адаптер от официалния сайт. Само в този случай ще бъдат инсталирани специални компоненти, които ще увеличат производителността на видеокартата и ще позволят нейната фина настройка.
  15. Когато инсталирате софтуера за графичния адаптер и дънната платка, трябва да проверите резултата. За това отваряме "Диспечер на устройства". Натиснете комбинация от бутони ПечеляИ "R"на клавиатурата и в прозореца, който се отваря, напишете командата devmgmt.msc. След това натискаме "Влез".
  16. В резултат на това ще видите прозорец "Диспечер на устройства". Не трябва да съдържа неидентифицирани устройства и оборудване, до името на които има въпросителни или удивителни знаци. Ако това е така, значи сте инсталирали всички необходими драйвери. И ако има такива компоненти, препоръчваме да използвате един от следните методи.

Метод 2: Помощни програми за автоматично актуализиране на софтуер

Ако сте твърде мързеливи, за да търсите и инсталирате целия софтуер ръчно, тогава трябва да разгледате по-отблизо програмите, които са предназначени да улеснят тази задача. Разгледахме най-популярните програми за автоматично търсене и актуализиране на софтуер в отделна статия.

Можете да използвате някоя от описаните помощни програми. Но все пак препоръчваме да използвате DriverPack Solution или Driver Genius. Това са програмите с най-голямата база данни с драйвери и поддържан хардуер. Вече ви казахме как да използвате DriverPack Solution.

Затова нека ви кажем как да намерите и инсталирате всички драйвери с помощта на програмата Driver Genius. И така, да започваме.

  1. Стартираме програмата.
  2. Веднага ще се озовете върху нея начална страница. В средата има зелен бутон „Стартиране на проверка“. Натискаме смело върху него.
  3. Процесът на сканиране на вашия компютър или лаптоп ще започне. След няколко минути ще видите списък с всички устройства, за които трябва да изтеглите и инсталирате софтуер. Тъй като не търсим конкретен драйвер, проверяваме всички налични елементи. След това натиснете бутона "по-нататък"в долната част на прозореца на програмата.
  4. В следващия прозорец ще видите списък с устройства, за които драйверите вече са актуализирани с помощта на тази помощна програма, и тези устройства, за които софтуерът все още трябва да бъде изтеглен и инсталиран. Последният тип устройство е маркиран със сив кръг до името. За надеждност просто натиснете бутона „Изтегляне на всички“.
  5. След това програмата ще се опита да се свърже със сървърите, за да изтегли необходимите файлове. Ако всичко върви добре, ще се върнете към предишния прозорец, където можете да проследите напредъка на изтеглянето на софтуера в съответния ред.
  6. Когато всички компоненти бъдат изтеглени, иконата до името на устройството ще стане зелена със стрелка надолу. За съжаление, инсталирането на целия софтуер с един бутон няма да работи. Затова изберете линията с необходимото устройство и натиснете бутона "Инсталирай".
  7. По желание създайте точка за възстановяване. Ще бъдете подканени за това в следващия диалогов прозорец. Изберете отговора, който отговаря на вашето решение.
  8. След това ще започне процесът на инсталиране на драйвера за избраното устройство, по време на който могат да се появят стандартни диалогови прозорци. В тях просто трябва да прочетете лицензионните споразумения и да натиснете бутоните "по-нататък". На този етап не би трябвало да имате проблеми. След като инсталирате този или онзи софтуер, може да бъдете подканени да рестартирате системата. Ако се появи такова съобщение, препоръчваме ви да го направите. Когато драйверът е инсталиран успешно, Програма за драйвери Genius до линията с оборудването ще има зелена отметка.
  9. Следователно трябва да инсталирате софтуер за цялото оборудване от списъка.
  10. Накрая можете да сканирате отново компютъра, за да бъдете убедителни. Ако сте инсталирали всички драйвери, ще видите подобно съобщение.
  11. Освен това можете да проверите дали целият софтуер е инсталиран с "Диспечер на устройства"както е описано в края на първия метод.
  12. Ако все още има неидентифицирани устройства, опитайте следния метод.

Метод 3: Онлайн услуги

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

В него ще намерите подробна информация как да намерите ID и какво да правите с него след това. Както и ръководство за използване на двете най-големи онлайн услуги за търсене на драйвери.

Метод 4: Ръчно актуализиране на драйвери

Този метод е най-неефективният от всички по-горе. Въпреки това, в много редки случаи, той е този, който ще може да помогне при инсталирането на софтуера. Ето какво е нужно.


Това са най ефективни начиниопределите устройствата, за които трябва да инсталирате софтуера. Надяваме се, че една от предложените опции ще ви помогне да разрешите този проблем. Не забравяйте да актуализирате софтуера на вашите устройства навреме. Ако имате затруднения при намирането или инсталирането на драйвери, пишете в коментарите. Заедно ще оправим всичко.

Както знаем, на хардуерно ниво модерен компютърсе състои от функционални единици, които са определени електронни компоненти. Широк кръг потребители персонални компютризапознати с такива функционални блокове като: процесор, памет, видеокарта, звукова карта, HDD, I / O контролер (осигуряващ работата на клавиатура, мишка, джойстик, USB носители (флаш памети)), принтер, скенер и някои други. На физическо ниво тези устройства взаимодействат помежду си чрез специални шини и протоколи, създавайки комбинация от тяхното взаимодействие със симбиоза от операции, което в общия случай характеризира функционирането на компютъра. Но компютърът е просто колекция от електронни компоненти? Разбира се, че не, защото един от основните хардуерни модули, процесор, е предназначен да изпълнява машинни инструкции, чиито последователности, както знаем, се състоят от програми, в светлината на това би било уместно да споменем още едно ниво - софтуер. Сега да се върнем в не толкова далечното минало; в ранните дни на компютърната ера програмният код (който често се пише директно на машинни кодове/езици на ниско ниво) може лесно да взаимодейства директно с хардуера, тъй като хардуерната архитектура е сравнително проста. С течение на времето обаче технологиите се развиха, нивата на хардуер и софтуер се развиха взаимосвързани и първото доведе до появата на голямо разнообразие от устройства, а второто до появата на огромно разнообразие софтуерни модули, което по-късно води до появата на операционните системи. Операционната система беше ключов крайъгълен камък в историята на развитието на компютърната индустрия, тъй като тя, наред с други неща, действаше като връзка, вид координатор (диспечер), който осигуряваше взаимодействието между устройствата и програмите: приемаше заявки от софтуерния слой (например потребителски програми) за обмен на данни с това или онова устройство и обратно, тоест всъщност служи като интерфейс между хардуерната и софтуерната част. Операционните системи също не стояха неподвижни и ако първоначално взаимодействието на операционната система с компютърния хардуер беше сравнително просто, тогава с усложняването на архитектурата и въвеждането на нови хардуерни възможности структурата на операционната система стана по-сложна. По време на развитието на операционните системи разработчиците са се опитвали да създадат код, който осигурява пълно взаимодействие с максималния възможен брой хардуерни устройства, налични на пазара. Въпреки това, такъв подход, тъй като архитектурата на персоналните компютри x86 стана по-сложна, доведе до появата на концепцията за отделен софтуерен слой, наречен драйвер, отговорен за взаимодействието с определен клас / тип устройство. Концепцията на драйвера се оказа толкова успешна, че в допълнение към основната посока - поддръжка на физически устройства, тя беше екстраполирана към някои категории логически / виртуални устройства. В тази статия ще говорим какво е то драйвер за windows.

Теория

Нека се отдалечим малко от концепцията за драйвер и да разгледаме общата теория. За да разберете какво е драйвер в една система, първо трябва да преминете през минимум теория за общата x86-64 архитектура. Защо x86, да, защото тази конкретна платформа: а) беше избрана от мен за експерименти, б) е най-често срещаната в клиентския сегмент на операционната Windows системи. Функциите, изразени в този раздел, ще ни дадат представа за много аспекти на работата както на самата операционна система, така и съответно на драйверите в нейния състав.

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

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

  • Реален режим;
  • Виртуален режим (Виртуален режим);
  • Защитен режим;
  • Дълъг режим (Дълъг режим).

В зората на ерата на развитие на персонални компютри с архитектура x86 процесорът работеше в реален режим. Независимо от това, реалният режим постепенно остана в миналото, тъй като имаше редица характеристики, които направиха невъзможно по-нататъшното развитие на технологиите: 16-битова шина за данни и 20-битова адресна шина (ограничение на адресирането), адресиране на сегменти с размери на сегменти от 64 килобайта (неудобство при използване на адресно пространство), липса на ограничения за достъп до адресното пространство. За да се премахнат съществуващите ограничения, беше разработен защитен режим, който предостави редица функции, важни за развитието на операционните системи: "мултитаскинг", защитен механизъм (достъп до привилегировани команди), който осигурява контрол на достъпа на различен код секции (програми) един към друг, модел виртуална памет. В защитен режим Процесори на IntelАрхитектурите x86 прилагат така наречените защитни пръстени или нива на привилегии. Има четири от тях: 0 (най-привилегировани), 1, 2 и 3 (най-малко привилегировани). Нивата на привилегии са предназначени да защитят кода в режим на ядрото от потребителски програми и потребителските програми една от друга, тъй като това може да доведе до повреда. Операционната система Windows обаче не използва всички изброени нива, в нея участват само две от тях: 0 и 3.
За яснота на разбирането на това представяме опростена диаграма на взаимодействието на компонентите на Windows:

Както можете да видите, вътрешната среда на операционната система Windows е разделена на две части и поддържа два режима на изпълнение:

  • Потребителски режим- непривилегирован режим, свързан с хардуерния 3-ти процесорен защитен пръстен;
  • Режимът на ядрото е привилегирован режим, свързан с хардуерния защитен пръстен на 0-ия процесор;

Тази функция е може би най-важната точка в разбирането на вътрешната структура на Windows: глобално операционната система е разделена на две основни части: потребителски режим и режим на ядрото.

Струва си да разберете, осъзнаете и запомните веднъж завинаги, защото всъщност това е една от основните, основни концепции на толкова много съвременни операционни системи.
Потребителските режими и режимът на ядрото имат следните разлики:

  • Изолирани (неприпокриващи се) виртуални адресни пространства: пространството на потребителския режим заема долната част (адреси от до), пространството на режим на ядрото заема горната част (адреси от до);
  • Различни привилегии на код за достъп до ресурси (памет, процесор, устройства и др.).

Следните процеси се изпълняват в потребителски режим:

Подсистема Описание
Процеси за поддръжка на системата
  • Процес на влизане в Winlogon (winlogon.exe)
  • Процес локален сървър lsass удостоверяване (lsass.exe)
  • Процес на Service Control Manager (services.exe)
  • Процес на управление на сесии (smss.exe)
  • Конзолен процес (conhost.exe)
  • Процес на локален мениджър на сесии (lsm.exe)
  • . . .
Обслужващи процеси
  • Хост процес за услуги (svchost.exe)
  • Процес на спулер (spoolsv.exe)
  • Процес на управление на WMI услуги (winmgmt.exe)
  • . . .
Приложения
  • Потребителски приложения (всички приложения, които не са включени в другите категории).
  • Диспечер на задачите (taskmgr.exe)
  • Explorer (explorer.exe)
  • Конзола за управление (mmc.exe)
  • . . .
Подсистеми на околната среда
  • Подсистема 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)
  • I/O мениджър
  • Мениджър на процеси
  • Мениджър на нишки
  • Мениджър на виртуална памет
  • Мениджър на обекти
  • PnP мениджър
  • Диспечер на захранването
  • Мениджър на прозорци
  • . . .
Ядро инициализация на драйвери, критични за системата по време на фазата на зареждане, междупроцесорна синхронизация, планиране и изпращане на процеси/нишки/прекъсвания, обработка/изпращане на изключения/грешки и някои други функции (ntoskrnl.exe, ntkrnlmp.exe, ntkrnlpa.exe, ntkrpamp .exe).
Драйвери на устройства драйвери за физически/логически/виртуални устройства: файлова система, мрежови, дискови и други драйвери.
Подсистема за прозорци/графика (система за прозорци и графики) Подсистема за поддръжка на прозорци и графики, която осигурява поддръжка за графични функции. потребителски интерфейс(Графичен потребителски интерфейс, GUI). (win32k.sys)
Слой на хардуерна абстракция (HAL) осигурява независимост от хардуера на платформата, изолира компонентите на ядрото от спецификата хардуер. (hal.dll)

Тъй като всяка операционна система просто трябва да може да работи с хардуер, дистрибуторският комплект (инсталационен комплект / системни файлове) съдържа драйвери за ключови хардуерни компоненти, без които системата буквално ще загуби достъп до хардуера с всички произтичащи от това проблеми: няма може да функционира или изобщо да не премине през процеса на инсталиране. Тези "вътрешни" драйвери са представени под формата на така наречената вградена библиотека с драйвери, която се променя по състав от версия на версия, в зависимост от етапите на развитие на хардуера и пазарните тенденции. Драйверите от тази библиотека, ако е необходимо, се инсталират на етапа на инсталиране на операционната система, в зависимост от откриването (идентификацията) на определени устройства в компютъра. По принцип по време на инсталацията кодът за откриване на хардуер открива устройствата, инсталирани на компютъра, и проверява неговата библиотека за сравними драйвери. За тези устройства, за които има системни драйвери, инсталирането се извършва в автоматичен (фонов) режим. По този начин, "на изхода", след инсталирането на операционната система, можем да получим минималния набор от системни драйвери, необходими за функционирането, което ни позволява да организираме работеща първоначална работна среда. Но си струва да запомните, че не трябва да се ограничавате до драйверите, вградени в комплекта за разпространение, тъй като пълното функциониране на повечето устройства може да изисква драйвери, предоставени от производителя на устройството.

Остава въпросът: всички компоненти в режим на ядрото взаимодействат ли с хардуера изключително през HAL слоя? има ли изключения В мрежата много източници предоставят диаграми, в които драйверите на графичния адаптер взаимодействат с видеокартите сякаш "директно", заобикаляйки HAL. Доколкото си спомням, графиките бяха с най-висок приоритет в някои версии на Windows, така че те бяха отделени в отделна категория устройства, които работят директно с графичен адаптер, и това беше направено с цел ускоряване GUIсистеми.

Нива на заявка за прекъсване (IRQL)

Сред основните вътрешни механизми, които определят функционирането на операционната система Windows, има тема, която е доста важна за разбирането на принципите на работа на драйверите, която е малко вероятно да бъде заобиколена. Този механизъм се нарича ниво на заявка за прекъсване(Ниво на заявка за прекъсване, ниво на IRQ, IRQL) и е доста трудно за разбиране, така че задълбоченото му проучване далеч надхвърля обхвата на представения материал, но в тази статия ще се опитаме да обобщим (е, в бъдеще ще ще отдели отделна статия за него). Честно казано, самият аз все още съм объркан относно концепцията за IRQL, така че ще изложа собственото си разбиране систематично, стъпка по стъпка, въз основа на знанията, придобити на всеки от етапите.
Терминът прекъсване винаги е бил свързван с мен с реалния режим на работа на процесора, пренасяйки се в дните на операционната система MSDOS, в която всичко беше съвсем просто: имаше набор от 256 прекъсвания, достъпни чрез векторната таблица на прекъсванията. Някои от тези прекъсвания са съответно хардуерни, генерирани независимо от някои външни хардуерни събития, докато други са софтуерни, съответно могат да бъдат извикани от кода на приложението. Записите в таблицата на прекъсванията можеха да бъдат предефинирани, т.е. векторът на манипулатора на прекъсванията беше достъпен за промяна по желание на собствена процедура за обработка. Такива понятия като нивото на заявките за прекъсване не съществуват, всичко беше просто и ясно. Въпреки това, с развитието на процесорите и операционните системи, първо се появи защитен режим, а след това Windows, от този момент всичко започна бързо да се усложнява.
Буквално внезапно в първите версии на Windows 95 / NT се появи някаква таблица (състояща се от 32 нива на заявка за прекъсване), чиито нива се градират от най-ниското 0 (пасивно) до най-високото 31 (високо):

Име Клас Предназначение Intel x86-64 ниво
ВИСОКО Хардуер Най-високото ниво. NMI и други видове. 31
МОЩНОСТ Хардуер Събития за прекъсване на захранването 30
IPI Хардуер Междупроцесорен сигнал. Сигнали за междупроцесорна комуникация. 29
ЧАСОВНИК Хардуер Цикъл на системния таймер 28
ПРОФИЛ Хардуер Контрол на изпълнението. Таймер за профилиране на ядрото (механизъм за измерване на производителността на системата). 27
УСТРОЙСТВО Хардуер DIRQL (IRQL на устройства). Хардуерни прекъсвания на устройството. 3-26
ИЗПРАЩАНЕ програма Операции по планиране/извиквания на отложени процедури (DPC). 2
APC програма Извиквания на асинхронни процедури. 1
ПАСИВЕН програма Пасивно ниво. Няма никакви прекъсвания. Нормално ниво на изпълнение на код в потребителски режим 0

Както можете да видите, в таблицата по-горе има много интересна функция: както софтуерните, така и хардуерните нива са събрани заедно (0-2 са софтуерни нива, а 3-31 са хардуерни нива).

IRQL е патентован програмен атрибут, въведен от разработчиците на Microsoft. Този механизъм няма хардуерна поддръжка от процесора. Системата независимо управлява всички видове прекъсвания, които възникват чрез механизма за картографиране на нивата на прекъсване на хардуерния контролер за прекъсване (PIC) и неговите собствени софтуерни нива в една единствена таблица с нива на прекъсване, независима от хардуера.

От това твърдение следва, че моделът е собствен, софтуерен и нивата в него не са обвързани с никаква хардуерна спецификация, което позволява на системата да сглобява хардуерни и нехардуерни типове прекъсвания в една йерархия от приоритети. По-ниските (нехардуерни/софтуерни) IRQL нива (ПАСИВНО, APC, DPC/DISPATCH) се използват за синхронизиране на софтуерните подсистеми на операционната система: задействат операции по планиране, като превключване на нишки или I/O обработка на завършване. Нека ги разгледаме подробно:

  • 0-ти (най-нисък) IRQL приоритет (ПАСИВЕН):е типичното ниво на заявка за прекъсване, при което се извършва работа в операционната система, както в потребителски режим, така и в режим на ядрото. Код (програма) се изпълнява на дадено ниво, могат просто да бъдат прекъснати (изпреварвани) от каквото и да е: например нишки, изпълнявани с IRQ PASSIVE ниво, се изпреварват от планировчика след изтичане на времето, определено за тях.
  • APC и DPC/DISPATCH IRQL са нива на прекъсване на софтуера, свързани с планировчика.
  • Ниво 1 IRQL (APC):На това ниво се изпълняват така наречените APC процедури, тоест процедури, които се изпълняват асинхронно в контекста на конкретна нишка, с други думи, организират асинхронни I / O или адресират / изчакват освобождаването на всеки (външен, глобални) системни обекти. Използването на APC функции (например WaitForSingleObjectEx) в кода не води до незабавно изпълнение на функцията, вместо това нишката (в контекста на която се изпълнява функцията) влиза в специален статус и се генерира APC софтуерно прекъсване, извикването на функция се поставя във вътрешна опашка. Следващият път, когато дойде време тази нишка да се изпълни, планираната APC функция се изпълнява на APC слоя. Следователно нишките, изпълнявани на APC слоя, не получават заявки от своя собствен APC слой, който системата използва за I/O операции за завършване.
  • Ниво 2 IRQL (DPC/DISPATCH):
    • използвани за обработка на отложени извиквания на процедури (DPCs): Извикванията на отложени процедури са рутинни процедури за обратно извикване, които са отложени за изпълнение, докато не настъпи превключване към ниво 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 списъка и след това извиква планировчика. Scheduler открива, че квантът от време на текущата нишка е изчерпан, т.е. намален до нула, след което Scheduler изпълнява алгоритъма за планиране, за да избере следващата нишка за изпълнение. Кодът на потока, който е зададен да бъде изпълнен, ще бъде изпълнен, когато системата падне до ниво 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 с различни данни. Когато контролът се върне към нашия драйвер, той ще продължи да променя файла със собствените си данни, като по този начин презаписва данните, дошли от друг източник. По този начин файлът ще влезе в непоследователно състояние. За решаване на тези проблеми са въведени различни обекти на системата за синхронизация. За да може кодът на ниво ядро ​​да променя определени типове данни, mutex обекти, той първо трябва да придобие собственост върху ключалките.

Концепция на водача

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

Съответно изводите, произтичащи от това твърдение, са очевидни: за взаимодействието на системата с устройствата са необходими отделни интерфейси, може би дори сложна комбинация от няколко интерфейса. Концепцията на драйвера е разработена за решаване на проблема със сдвояването и се използва в моделите на повечето модерни системи, се основава на работата в адресното пространство на ядрото на специален код, който осигурява взаимодействието на системното ядро ​​с всякакъв тип логически / физически устройства.
Предвид общата ориентация на ресурса, в статията ще разгледаме спецификата само на драйверите на операционната система Windows. Така че за Windows драйвери, като по принцип драйверите на други операционни системи, следните твърдения са верни:

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

същото, но с други думи:

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

Едно от горните определения подчертава важна характеристика на драйвера: грешка е да се мисли за драйвер единствено във взаимодействие с физическо устройство, тъй като драйверът не трябва да осигурява достъп до функциите на какъвто и да е хардуер, той може също да предоставя само софтуерни функции. Примери за такива решения са драйвери, инсталирани в системата от антивируси, системи за криптиране на данни и системи за наблюдение. Общ алгоритъмРаботата на всеки драйвер е както следва: приложенията, чрез функциите на специален потребителски интерфейс (в Windows това е Win32 API) или I / O заявки, косвено / директно имат достъп до функциите на драйвер на устройство. Драйверът от своя страна осигурява достъп до функционалните характеристики на интересуващото ви устройство и също така контролира процеса на взаимодействие между заявките на приложението и самото устройство. Естествено, драйверът трябва да дефинира (опише) всички принципи на взаимодействие с обслужваното (подчинено, собствено) устройство, трябва да има набор от данни за управлявания обект, инструкции (набор от команди), с помощта на които системният / потребителският код може правилно да инициализира устройството и да започне взаимодействие с него.

Зареждане на драйвери при стартиране на операционната система

Би било много интересно да се види на какъв етап от зареждането на операционната система започва да се зарежда и стартира първият Windows драйвер? Въпреки това, в подробно представяне, този процес е доста нетривиален и за дълбоко разбиране изисква обръщане на кода на много компоненти за зареждане, в допълнение към всичко е необходимо да се вземат предвид много свързани точки, като например: последователност, дължаща се на зависимостта между драйверите, поради което драйверите могат да бъдат групирани в така наречените "групи за зареждане", самото зареждане на драйвери може да бъде разделено на няколко етапа и т.н. В същото време трябва да се отбележи, че в мрежата има голямо количество материали относно вече остарели операционни системи, така че ще се опитаме да актуализираме процеса на изтегляне. Windows драйверина примера на (най-близката до мен по дух) операционна система Windows 7. И за начало няма да навреди да говорим за основните компоненти Ядрото на Windowsучаства активно в процеса на зареждане на драйвера:

  • Мениджър (мениджър) вход / изход (I / O мениджър)- модул в режим на ядрото, който е част от изпълнителната подсистема, която контролира процесите на вход / изход, осигурява абстракция на физически и логически устройства за потребителски приложения и компоненти на системата A, който свързва приложения в потребителски режим с драйвери. Контролира етапите на процеса на взаимодействие с водача. Целият обмен на данни на I / O мениджъра с драйверите се осъществява чрез извикване на процедурите за обратно извикване на драйвера и им предаване на стандартизирана IRP структура от данни, която описва цялата същност на повикването към драйвера;
  • Plug-and-Play мениджър (PnP мениджър)- модул за режим на ядро ​​и потребителски режим, който е част от изпълнителната подсистема, отговорна за добавяне, разпознаване, премахване на устройства в операционната система. Част от режима на ядрото взаимодейства с останалите системни компоненти и драйвери по време на процеса на инсталиране (стартиране). софтуернеобходими за обслужване на устройствата в системата. Частта за потребителски режим е отговорна за взаимодействието с програмите за потребителски режим (за интерактивно потребителско изживяване) в ситуации, които изискват инсталиране на нови драйвери или коригиране на работни параметри в съществуващи. Управлява разпределението на хардуерните ресурси в системата, също знае как да разпознава устройства, да реагира на тяхното свързване / прекъсване, да зарежда подходящите драйвери при откриване на нови устройства;
  • Мениджър за контрол на услуги (SCM)- системен процес, отговорен за създаване, изтриване, стартиране и спиране на услуги и драйвери на операционната система. Той също така осигурява: работа с регистъра на събитията, поддръжка на технологията за дистанционно извикване на процедури (RPC);

Тези два мениджъра, тоест I/O мениджърът и 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. Ядрото зарежда I/O Manager и PnP Manager.
  6. I/O мениджърът създава глобален каталог. Тази директория по-късно се използва за регистриране на обекти на устройство.
  7. PnP мениджърът стартира драйверите, които вече са заредени в паметта в предишната стъпка (от тип SERVICE_BOOT_START), като извиква процедурата DriverEntry на всеки драйвер. На този етап се зареждат и зависимите драйвери.
  8. PnP мениджърът изгражда системното дърво на устройствата, преминава през него от корена и зарежда драйвери на устройства, които все още не са заредени.
  9. PnP мениджърът зарежда останалите незаредени драйвери на устройства, независимо от стойността на параметъра Start. Много от тези драйвери са от тип SERVICE_DEMAND_START.
  10. PnP мениджърът зарежда драйвери с разширена функционалност. Тези драйвери включват драйвера за видеоадаптер, драйвери за външни устройства, драйвери за TCP/IP стек. Такива драйвери са от тип SERVICE_SYSTEM_START.
  11. Ядрото зарежда подсистемната услуга на мениджъра на сесии (SMSS), която от своя страна зарежда диспечера за управление на услуги (SCM). SCM сканира кошера на системния регистър ( HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services) и въз основа на получената информация монтира вътрешна база данни с услуги/драйвери, формира програмен интерфейс за обслужване на инсталирани услуги/драйвери. SCM зарежда "автоматично стартиране" не-PnP драйвери (от тип SERVICE_AUTO_START) и всички драйвери, от които зависят.

От целия този алгоритъм за зареждане на драйвери трябва да разберем следните основни правила: драйвер може да бъде зареден (в зависимост от етапа / класа на драйвера) с помощта на PnP мениджър или с помощта на SCM, но I / O мениджърът участва активно в процеса на работа на водача .

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

Как може да изглежда един драйвер по отношение на структурата? Това наистина ли е някакъв специален клас програми, подредени по чисто специфичен начин? И аз веднъж наивно си мислех така, но ако се замислите, защо разработчиците на операционната система трябва да усложняват живота си и да измислят нов специализиран формат на изображението на изпълним файл за някои ядрени компоненти? Много по-лесно е да се адаптира старата, която отдавна е отстранена и доказана сто пъти.

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

Типът на подсистемата може да бъде зададен при изграждането изпълним модул. Самата собствена подсистема е типична за приложения, които работят по правила, различни от класическите: на етапа на подготовка на изображението за изпълнение, те не трябва да инициализират подсистемата Win32. Освен всичко друго, родната подсистема се използва за код в режим на ядрото, което е почти всички драйвери.

По аналогия с DLL, можем опростено да мислим за драйвера като за набор от процедури (извиквани от външни приложения), всяка от които е предназначена да обработва специфичен тип повикване към драйвера.

Нека направим малко отклонение и да поговорим за такова понятие като обект. Факт е, че целият процес на функциониране на драйвера на Windows, както и всеки друг модул на операционната система, зависи от различни структури от системни данни. Тези структури се управляват от ядрото и могат да съдържат нишки, събития, I/O заявки, устройства и други обекти.

  • Обекти. Блокове от данни, съдържащи записи на свойствата на конкретен обект на операционната система. Управлява се от диспечера (управителя) на обекти. Много обекти имат дескриптори (дескриптори), които правят обекта достъпен за приложенията.
  • Структури от данни. Блокове от данни, съдържащи записи на свойствата на конкретен обект на операционната система. управлявани от ядрото. Различават се от предметите, но (поради инерцията) се наричат ​​и обекти

Ето защо (с много натиск) всички вътрешни структури на операционната система Windows се наричат ​​обекти.
Сега да се върнем към процедурите на драйвера, всъщност така наречените „процедури“ на драйвера са COM обекти за обратно извикване, които обработват събития, идващи от съответните инфраструктурни обекти на операционната система, се казва, че драйверът предоставя на ядрото на операционната система COM интерфейс, определен от поредица от процедури, изпълнявани от драйвера. Експортирането, тоест публикуването (декларирането) на процедурите на драйвера за по-нататъшен достъп до тях отвън, се извършва чрез регистриране в основната процедура на драйвера (стандартна за всички драйвери), наречена DriverEntry.

Основната цел на функцията DriverEntry е разработчикът на драйвера да внедри в нея попълването на обекта (struct records) на драйвера с указатели към различни вътрешни процедури на драйвера, които осигуряват една или друга функционалност. В процедурата DriverEntry можете да зададете (промените) името на обект на устройство, което след това се използва от приложенията за отваряне на манипулатор на устройство и изпращане на пакети с I/O заявка (IRP).

Функцията DriverEntry всъщност е глобална функция за инициализация и се изпълнява веднъж по време на зареждането на драйвера. Тази функция може да бъде възможно най-проста или да съдържа разширена функционалност (допълнителни подпрограми), като например създаване на допълнителни обекти на устройството, запитване на устройството, допълнителни фази на конфигуриране и инициализация на устройството(ата).
След като публикува собствените си функции, драйверът става „видимото“ ядро ​​на операционната система. За да не усложняваме вече доста сложната теория, ще приемем, че от гледна точка на ядрото на Windows всяко устройство е вид абстрактно „виртуално устройство“, което работи със стандартизиран набор от команди и е достъпно чрез вътрешни интерфейси . Както бе споменато по-горе, в ядрото на операционната система Windows има специален модул на изпълнителната система, наречен I/O мениджър, който осигурява единен интерфейс за оперативна съвместимост за всички драйвери в режим на ядрото, включително драйвери за физически устройства, драйвери за логически устройства и драйвери за файлова система. Съответно I/O системата на ядрото управлява драйверите или можем да кажем, че драйверите използват интерфейса на I/O мениджъра, за да функционират в операционната система. От друга страна, драйверът осигурява преобразуването (преобразуването) на "стандартни команди", идващи от операционната система, в команди, които се "разбират" от управляваното от него устройство (ако има такова), и обратно. I/O мениджърът дефинира набор (набор) от рутинни процедури, които могат да бъдат внедрени в драйвер, защото:

Драйверът съдържа набор от рутинни процедури за обратно извикване, които осигуряват различни етапи на I/O процеса.

За по-задълбочено разбиране на това каква функционалност трябва да предоставя драйверът, нека дадем обща схема на основните процедури на драйвера:

Всъщност, като се погледне горната диаграма, става ясно какви точно видове взаимодействие, а именно групи от процедури, трябва да реализира абстрактният драйвер на Windows. Нека сега изброим някои от тези процедури:

  • Инициализация - I/O Manager стартира процедура за инициализация (наречена DriverEntry), която е предназначена да извършва действия на първоначалната настройкаобектът на драйвера, регистриране на всички други процедури на драйвера, конфигуриране на подчинения и извършване на други действия от името на разработчика.
  • Добавяне на устройство - добавете (по избор) обект на устройство. В тази процедура драйверът обикновено създава обекти на устройство за всяко устройство, което драйверът обслужва. Обикновено се използва за Plug-and-Play драйвери.
  • Обработка - набор от процедури за изпращане (обработка на различни състояния). Отваряне, затваряне, четене, писане на устройство, състояния на процесорна мощност, PnP събития и системни състояния, както и някои други видове взаимодействие, са описани в процедурите за изпращане. Всъщност това са основните процедури, тъй като типичните I / O операции се обработват чрез процедури за изпращане.
  • Стартиране (начало) I/O е вторият етап от обработката на I/O заявка към устройство, директно стартиране на I/O на устройството. Тази процедура може да се използва за започване на прехвърляне на данни към/от устройството.
  • Процедура за обслужване на прекъсвания - когато устройството генерира прекъсване, мениджърът на прекъсванията прехвърля управлението на тази процедура.
  • Обработка на повикване на отложена процедура - DPC рутината поема по-голямата част от обработката на прекъсванията след изпълнение на ISR. Извикванията на отложена процедура се изпълняват на по-ниски IRQL нива (DPC/DISPATCH) от самата ISR процедура. Подобен алгоритъм е внедрен, за да се избегне блокирането на други прекъсвания.
  • I/O Completion Routine – Многостепенният драйвер може да има I/O Completion Routines, които уведомяват за завършването на IRP обработката от драйвера на ниско ниво.
  • Процедури за отмяна на I/O - Ако I/O операциите могат да бъдат прекъснати, драйверът може да дефинира една или повече такива процедури. Когато драйвер получи IRP за I/O заявка, която може да бъде отменена, той присвоява процедура за отмяна на IRP и IRP преминава през различни стъпки на обработка, които процедурата може да промени или премахне, ако текущата операция не може да бъде отменена.
  • Рутина за бързо изпращане - Драйвери, които използват интензивно Cache Manager, като драйвери на файлова система, обикновено предоставят подобни рутини, за да позволят на ядрото да заобиколи общи I/O алгоритми за обработка.
  • Процедурата за разтоварване трябва да бъде внедрена във всеки драйвер, който работи (освобождава/заема) със системни ресурси, за да може I/O мениджърът да разтовари драйвера от паметта.
  • Процедура за предупреждение при изключване - позволява на драйвера да освободи всички заети ресурси, когато системата се изключи.

Става очевидно, че в процеса на разработване на драйвер за Windows не е необходимо да се прилага целият набор от процедури, описани по-горе, всеки драйвер е уникален и разработчикът е свободен да предостави свой собствен набор от реализации, поддържани от драйвера. Когато драйвер се зареди в системата с помощта на PnP мениджър или SCM, I/O мениджърът създава обект на драйвер в пространството на имената и извиква процедурата за инициализация на драйвера (обикновено DriverEntry), която изпълнява допълнителни стъпки за инициализация.

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

Обектът на драйвера представлява кода на драйвера и данните в ядрото: наред с други неща, драйверът експортира входните точки на своите процедури чрез този обект. Процедурата за инициализация на драйвера записва в атрибутите на този обект входните точки на всички експортирани процедури на драйвера. Веднъж зареден, драйверът може да създава обекти на устройства, които да представят устройства или дори да формират интерфейса на драйвера. Повечето драйвери създават обекти на устройства по този начин:

  • PnP драйверите създават обекти на устройства чрез своите процедури за добавяне на устройства, когато PnP мениджърът ги информира за наличието на устройство, което управляват.
  • Не-PnP драйверите създават обекти на устройства, когато техният I/O мениджър извиква техните процедури за инициализация.

При създаване на обект от тип "устройство" (устройство), драйверът трябва да зададе този обектИме. След това този новосъздаден обект се поставя в пространството от имена обектен мениджър(Object Manager), който, подобно на I / O мениджъра (мениджър), е част от изпълнителната подсистема на ядрото. Мениджърът на обекти е проектиран да поддържа база данни за всички ресурси на операционната система, представени като обекти. Името на обекта може да бъде изрично дефинирано от самия драйвер или генерирано автоматично от I/O мениджъра. По конвенция обектите на устройството трябва да се намират в директорията \Device на пространството от имена на мениджъра на обекти, което е недостъпно за приложения чрез Win32 API. И за да може обектът "устройство" да стане достъпен за приложенията, драйверът трябва да създаде в \GLOBAL?? символна връзка към името на този обект в директорията \Device. Не-Plug-and-Play и драйверите на файловата система обикновено създават символна връзка с добре познато име (да речем \Device\VMwareKbdFilter). Само след всички изброени действия драйверът става "видим" в системата и достъпен за извикване от потребителски приложения.

Взаимодействие с водача

Как може потребителска програма да взаимодейства с драйвер в системата? Има два начина да направите това:

  1. Неявно -- извикване на генерична Win32 API функция;
  2. Явно -- директна I/O заявка към драйвера;

Е, с първия случай всичко е съвсем просто, в приложна програмаизвиква се някаква обикновена API функция на Win32 (например CreateFile), която след това, в зависимост от целевия обект (файл, директория), може да извика функцията за обмен с драйвера във веригата на нейните извиквания. Всъщност в този случай кодът на приложението не си поставя задачата да взаимодейства с който и да е драйвер, просто по веригата от извиквания на процедури, на определен етап изпълнението преминава в режим на ядрото и там се извиква функцията на драйвера. Всичко това остава скрито от разработчика, но е възможно да се проследи взаимодействието с помощта на инструменти за отстраняване на грешки.
Вторият случай е по-интересен, възниква, когато извикването на драйвер не означава непряко повикване (чрез извикване на обща функция), а прехвърляне с помощта на специална функция (например DeviceIoControl) на така наречената I / O контролна заявка , което по-нататък инициира формирането на блок от данни, наречен I/O заявка пакет.

I/O Request Packet (IRP) е структура от данни на ядрото на Windows, съдържаща информация, описваща I/O заявка.

Формално IRP е пакет, но всъщност е обект на ядрото, тоест структура от данни (блок) с набор от процедури за I / O мениджъра, който осигурява обмен на данни между програмата и драйвера или между шофьорът и шофьорът. Както вече споменахме, архитектурата на Windows е изградена по такъв начин, че не позволява директно взаимодействие между програмата за потребителски режим и драйвера, така че такъв обмен се свежда до изпращане на IOCTL кода от програмата, което вече води до I/O мениджърът генерира IRP заявка. Именно I/O мениджърът, отговорен за взаимодействието с драйверите, управлява IRPs. I/O мениджърът получава I/O заявка от потребителската програма, след което генерира IRP и го предава на съответния драйвер.
Пакетът IRP се състои от две части:

  • постоянна част;
  • Стек за разположение на I/O.

В постоянната част 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 . Пакетът също така съдържа I/O стек за разположение - специална IO_STACK_LOCATION структура, съдържаща определени параметри: това е наборът от устройства, които ще обработват този IRP пакет. Освен това този пакет се предава последователно от устройство на устройство по стека. Повече от едно разположение на стека показва, че IRP може да се управлява от множество драйвери. „Стековите клетки“ на IRP са проектирани да съхраняват „променлива“ информация, когато IRP пакетът преминава през стека на драйвера. IRP преминава през публикуваните процедури на всеки драйвер, всяка от които извлича информацията, от която се нуждае от „своето“ местоположение на стека за поставяне на I/O. Процедурите на драйвера традиционно се наричат ​​"процедури за обратно извикване". Както вече споменахме, функцията за инициализация на DriverEtnry казва на ядрото (публикува) имената на тези процедури и по-късно самото ядро ​​извиква тази или онази процедура при определени обстоятелства.
За разлика от стандартната програма, драйверът не е класически процес със собствено адресно пространство и няма нишка за изпълнение. Вместо това функцията на драйвера се изпълнява в контекста на нишката и процеса, в който е извикана. Контекстът (пространството за изпълнение на код) на драйвер зависи от това кой извиква (извиква) драйвера. Жалба може да бъде инициирана:

  1. Приложна програма (програма за потребителски режим). В този случай контекстът на изпълнение на драйвера е точно известен и съвпада с контекста на приложната програма;
  2. Друг драйвер (на трета страна). В този случай контекстът на изпълнение е по-труден за определяне, той може да бъде известен или произволен, зависи от контекста на изпълнение на извикващата функция на драйвера.
  3. Хардуерно/софтуерно прекъсване. В този случай контекстът на изпълнение е случаен, тъй като прекъсване (и съответно превключване към код на драйвер) може да възникне, когато се изпълнява абсолютно всеки код в операционната система.

Отново, за разлика от стандартната програма, драйверът не може да извиква стандартни Win32 API функции, той може да работи само с функции, налични в ядрото, които започват с префиксите Ex.. , Hal.. , Io.. , Ke.. , Ks.. , Mm.. , Ob.. , Po.. , Ps.. , Rtl.. , Se.. , Zw.. и някои други.

Видове (видове) драйвери за Windows

В процеса на еволюция и съответно усложняване на концепцията на драйвера, драйверите започнаха да се разделят на категории (или типове) в зависимост от предназначението. Ето основните от тях:

  • Класни драйвери(Class driver) - драйвери, разработени от Microsoft за определен клас устройства.
  • Драйвери за файлова система(Драйвери на файловата система) - драйвери, които реализират файлови системина различни медии.
  • Наследени драйвери(Наследени драйвери) - "остарели" (структурно съвместими с по-стари версии на ОС) драйвери за режим на ядрото, които независимо директно управляват подчиненото устройство без допълнителни драйвери за устройства. Защо имат такова име? Тъй като това е тип драйвер, който е запазен от първите версии на операционната система Windows NT.
  • Драйвер на шина - Драйвери, които осигуряват функционалността на всяка компютърна шина (ISA, PCI, USB, IEEE1394 и други);
  • Филтриране на драйвери(Драйвер за филтриране) - драйвери, използвани за наблюдение/промяна на логиката на друг драйвер, като работят с данните, преминаващи през него.
    • Топ драйвери за филтри(Драйвери за горен филтър) - подтип драйвери за филтър, разположен над функционалния драйвер в стека. Всички заявки преминават през драйверите на горния филтър, което означава, че те могат да променят и / или филтрират информацията, отиваща към функционалния драйвер и след това, евентуално, към устройството. Примери биха били филтърен драйвер, който следи/филтрира трафика, криптира/прихваща заявки за четене/запис. Такива драйвери се използват в защитните стени.
    • Драйвери за долен филтър(Драйвери с по-нисък филтър) - подтип филтърни драйвери, разположени под функционалния драйвер в стека. По правило по-малко заявки преминават през такива драйвери с по-нисък филтър, отколкото други драйвери за филтър, тъй като повечето заявки се изпълняват и завършват от самия функционален драйвер.
  • Функционални драйвери(Функционален драйвер) - драйвери, които функционират независимо и определят всички аспекти, свързани с устройството.
  • PnP драйвер (PnP драйвер) - драйвер, който поддържа технологията Plug-and-Play;
  • Minidriver (miniport, miniclass)(Miniport драйвер, Minidriver, Miniclass драйвер) - драйвери, които обработват задачи, свързани с целевото устройство, и използват клас драйвери за управление на устройството. Действа като една част от чифт драйвери, в които тази категория действа като драйвери на крайни устройства, които изпълняват специфични задачи на устройството.

Според нивото на компонентизация драйверите са:

  • Едно ниво - I / O обработката се осъществява в рамките на един изпълним модул (драйвер).
  • Многостепенна - I / O обработката се разпределя между няколко драйвера.

PnP драйверите под Windows са разделени на:

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

По режим на изпълнение драйверите на Windows се класифицират:

  • Драйвер за потребителски режим.
  • Драйвер за режим на ядрото.

Модели на драйвери

През цялото съществуване на операционната система разработчиците са се опитвали да стандартизират и опростят разработването на драйвери. В резултат на това се появиха модели.

WDM модел

Имало едно време две основни посоки за развитие на концепцията за драйвери на Windows:

  1. Windows 95/98 използва модела VxD (драйвер за виртуално устройство);
  2. в Windows NT3.51 моделът на NT драйвер (драйвер в NT стил, NT драйвер), разработен паралелно.

Въпреки това, започвайки от версията на Windows 98/NT4.0, разработчиците направиха опит да уеднаквят (универсализират) разработката на драйвери, в резултат на което споменатите модели бяха заменени с нов WDM модел.

WDM (Модел на драйвер за Windows, Windows драйвер Model) е унифицирана среда за разработка (рамка) за драйвери на устройства на операционната система Windows. Той е създаден, за да намали изискванията за стандартизация на кода за драйверите.

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

  • Функционален драйвер (Функционален драйвер) - отговаря за почти всички функционални характеристики на обслужваното устройство: I / O операции, обработка на прекъсвания и управление на устройството;
  • Драйвер на шина - отговаря за поддържането на връзката между устройството и компютъра, всъщност поддържа комуникационната шина (например PCI, USB и др.).

Модел WDF

По време на разработката WDM моделът е претърпял много промени, нараствайки значително. Започвайки с Windows Vista, беше направен друг опит да се разработи концепцията за драйвери на Windows, по същество WDM модела, който вече съществуваше по това време, което доведе до нов модел (добавка към WDM), наречен WDF.

WDF (Windows Driver Foundation, Windows Driver Foundation) е среда за разработка (набор от инструменти), която улеснява разработването на драйвери за устройства за операционни системи Windows (Windows 2000 и по-нови).

Това се дължи на безспорния факт, че разработчиците не успяха да постигнат достатъчно ниво на абстракция на WDM модела, а именно недостатъчна интеграция на I / O подсистемата с технологията Plug-and-Play и управление на захранването. Това остави разработчика на драйвера с огромна тежест за синхронизирането на същите тези I/O заявки с Plug-and-Play събития и заявки за захранване. Очевидно е необходимо допълнително опростяване на модела на водача. WDF замени WDM и се счита за най-модерния модел.
WDF изпълнява следните функции:

  1. „Премахване“ на някои класове драйвери, които не са критични за режима на изпълнение, в потребителския режим, което намалява общия брой сривове в ядрото.
  2. Голяма част от обработката на взаимодействието на I/O подсистемата с Plug-and-Play и управлението на захранването вече се управлява от вградените механизми на модела WDF.
  3. Предоставяне на нови вътрешни интерфейси към WDF модела, които позволяват абстракция от по-трудни за разбиране системни интерфейси; В WDM / стария модел е доста трудно да се приложи логиката на някои части на взаимодействие с драйвера, без да се научат всички основи на сложната архитектура на ядрото, докато WDF ви позволява да автоматизирате много видове взаимодействие; Голямо количество код при разработването на WDM драйвер вече може да бъде заменено от извиквания на процедури на WDF.
  4. Възможност за създаване на "каноничен" драйвер. Наличието на шаблони, които предоставят на програмист от трета страна възможността да замени критерии, уникални за техния драйвер, като по този начин намалява времето за разработка.

Моделът WDF е разделен на две области:

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

Разделянето на средите на потребителски режими и режими на ядрото в модела WDF е доста произволно, тъй като основната цел на това разграничение е да класифицира разработката на драйвери за определени класове устройства.



Зареждане...
Връх