Gestionarea serviciilor și driverelor Windows. Gestionarea driverului de dispozitiv. Gestionarea driverelor de pornire utilizând profiluri de selecție

Ordinea de încărcare a driverelor și serviciilor în Windows



Pentru cei care sunt interesați de funcționarea interioară a sistemului de operare Windows, le sugerez o mică cercetare. Vom încerca să aflăm care este responsabil pentru ordinea în care driverele și serviciile sunt încărcate în Windows și dacă această ordine poate fi modificată.

În primul rând, să ne uităm la ordinea curentă de pornire a sistemului utilizând programul LoadOrder de la Sysinternals. Programul ne va arăta ce este încărcat și în ce ordine când pornește sistemul de operare.

După cum se poate observa din figură, mai întâi sunt încărcate driverele de dispozitiv necesare pentru a porni sistemul, iar apoi diverse servicii Windows. Deoarece există unele diferențe între serviciile de încărcare și șoferii de încărcare, le vom lua în considerare separat.

Șoferii

Ca subiect de testare, să luăm driverul Microsoft ACPI (Configurație avansată și interfață de alimentare), care este responsabil pentru detectarea hardware-ului și gestionarea energiei. Sarcina ACPI este de a permite comunicarea între sistemul de operare și hardware, astfel încât driverul ACPI este încărcat chiar de la început.

Programul Loadorder oferă informații destul de limitate despre ordinea de încărcare, așa că mergem la registru pentru date mai precise. Fiecare driver și serviciu Windows are propria sa secțiune în ramura de registry HKLM\SYSTEM\CurrentControlSet\Services. Secțiunile sunt denumite după numele driver/serviciu, așa că avem nevoie de secțiunea ACPI.

Trei parametri de registry controlează ordinea în care este încărcat driverul. Parametrul principal start- determină tipul de pornire a driverului. Iată regulile prin care șoferii setează valoarea parametrului Start:

Șoferii care ar trebui încărcat de bootloader-ul sistemului atunci când sistemul de operare pornește, indicați valoarea start egal 0 (lansați la pornirea sistemului ). Un exemplu sunt driverele de magistrală de sistem și un driver de sistem de fișiere utilizate la pornirea sistemului;
Sofer asta nu este necesar direct pentru a porni sistemul, arata spre start valoare egală cu 1 (pornirea sistemului ). Exemplu - driverul plăcii video standard (VgaSave);
Conducător auto, nu este necesar pentru pornirea sistemului, stabilește valoarea start egal 2 (pornire automată). Un exemplu este un driver pentru un Multiple UNC Provider (MUP) care acceptă numele UNC ale resurselor de la distanță (tip );
Șoferi, nu este necesar pentru ca sistemul de operare să funcționeze(de exemplu, drivere adaptoare de rețea), indicați valoarea start egal 3 (lansare la cerere ).

Driverele de dispozitiv pot utiliza, de asemenea, parametri grupȘi Etichetă pentru a controla ordinea de pornire când sistemul pornește. Șoferii\serviciile folosesc parametrul Grup pentru a indica grupul căruia îi aparțin, iar ordinea în care sunt încărcate grupurile este determinată de parametru Listă, situat în secțiunea HKLM\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\.

Apropo, parametrul Grup nu este necesar. Dacă driverul/serviciul nu este inclus în niciun grup, atunci acesta este încărcat chiar la sfârșitul cozii.

Un șofer își poate rafina și mai mult ordinea de încărcare utilizând parametrul Tag, care specifică poziția specifică a șoferului în grup. Managerul I/O sortează driverele din grup după valoarea acestui parametru, iar driverele care nu au un parametru Tag sunt mutate în partea de jos a listei de drivere din grup.

Privind ordinea de încărcare, s-ar putea să credeți că driverele cu valori Tag mai mici sunt încărcate mai întâi, apoi cele cu altele mai mari, dar acest lucru nu este în întregime adevărat. Prioritatea valorilor parametrilor Tag într-un grup este determinată în secțiunea HKLM\SYSTEM\CurrentControlSet\Control\GroupOrderList.

De exemplu, să deschidem parametrul binar Boot Bus Extender, care corespunde grupului cu același nume, căruia îi aparține driverul ACPI. Parametrul este un set de cuvinte duble (4 octeți fiecare). Primul cuvânt (evidențiat cu roșu) specifică lungimea totală a variabilei (numărul de cuvinte duble), în exemplul nostru 06. Cuvintele duble rămase sunt doar etichete. Driverul ACPI are o etichetă egală cu 01 (evidențiată în verde).

Prioritatea unei etichete este determinată nu de valoarea etichetei, ci de poziția acesteia: cu cât eticheta este mai mare, cu atât este mai mare prioritatea acesteia în grup și cu atât este mai mare prioritatea șoferului căruia îi corespunde această etichetă. Și deoarece 01 este mai mare decât celelalte etichete, driverul ACPI este încărcat primul în grup.

Servicii

Ordinea în care sunt încărcate serviciile Windows este oarecum diferită de ordinea în care sunt încărcate driverele. Să luăm ca exemplu serviciul de actualizare automată (wuauserv). Nu este deosebit de critic pentru funcționarea sistemului și, prin urmare, este încărcat ultimul.

Să mergem din nou la registru. Parametrii de pornire a serviciului sunt localizați în secțiunea HKLM\SYSTEM\CurrentControlSet\Services\wuauserv. Am identificat doi parametri principali care sunt responsabili pentru ordinea de încărcare a acestui serviciu.

Serviciile Windows sunt pornite de Service Control Manager (SCM) în funcție de valoarea parametrului start. Acest parametru pentru servicii poate lua următoarele valori:

Pornire automată (2) - serviciul pornește automat, imediat după începerea procesului SCM principal Services.exe;
Lansare la cerere (3) - serviciul începe atunci când este necesar, la solicitarea oricărui serviciu sau program;
Dezactivat (4) - serviciul este dezactivat și nu va porni în niciun caz.

Valorile 0 (pornire la pornirea sistemului) și 1 (pornire prin sistem) pentru servicii nu pot fi specificate, doar pentru driverele de dispozitiv.

În plus, începând cu Windows Vista\Server 2008, a apărut un alt mod de lansare pentru servicii - pornire automată întârziată. Parametrul este responsabil pentru el DelayedAutoStart = 1, care îi spune CSM să pornească automat acest serviciu cu întârziere. SCM pornește serviciile care sunt setate la pornire întârziată după ce s-au încărcat serviciile marcate pentru pornire automată.

Modul de lansare a serviciului poate fi controlat nu numai din registru, ci și în modul grafic, din consola Servicii.

La fel ca șoferii, serviciile Windows pot folosi parametrul Grup din cheia lor de registry pentru a indica grupul căruia îi aparțin. Acum, pentru claritate, să luăm serviciul nostru wuauserv, situat la sfârșitul listei de descărcare. Folosind cheia de grup, o vom plasa în grupul Jurnal de evenimente, vom reporni și vom privi ordinea de încărcare în Loadorder. După cum puteți vedea, ordinea s-a schimbat și wuauserv a urcat de pe ultimul loc, încărcându-se imediat după colegul său de clasă - serviciul de jurnal de evenimente. Adevărat, ordinea de plasare în cadrul grupului nu poate fi modificată, deoarece Eticheta nu este folosită pentru servicii.

Și încă un parametru care afectează indirect ordinea în care sunt încărcate serviciile - DependOnService. Indică de ce servicii depinde serviciul. În consecință, serviciul nu este încărcat până când serviciile enumerate în DependOnService nu sunt încărcate.

Dependențe funcționează după cum urmează - dacă serviciile sunt în același grup, atunci serviciul dependent este mutat la sfârșitul listei și începe după serviciile de care depinde. Dacă grupurile sunt diferite, atunci serviciul pur și simplu nu va porni și SCM va genera o eroare.

Acest lucru este arătat mai clar în snap-in-ul Servicii, unde fila Dependență listează atât serviciile de care depinde un anumit serviciu, cât și serviciile care depind de el.

Așa că am aflat în ce ordine sunt încărcate driverele și serviciile în Windows și cum poate fi schimbată această ordine. Dar înainte de a vă grăbi să editați registrul, amintiți-vă că ordinea în care driverele și serviciile sunt încărcate este determinată automat și nu ar trebui să faceți modificări fără un motiv întemeiat. Doar un singur parametru setat incorect poate duce la inoperabilitatea completă a sistemului și nu există nicio garanție că va fi posibilă restabilirea acestuia. Prin urmare, înainte de a începe editarea registrului, asigurați-vă că ați făcut o copie de rezervă a acestuia și, de asemenea, este recomandabil să aveți la îndemână medii de pornire.

În partea anterioară a acestei serii, am analizat două abordări („lasă Windows să decidă” și „lasă-mă pe mine să decid”) care pot fi utilizate pentru a gestiona driverele externe atunci când se realizează o instalare Lite Touch folosind MDT 2010. În această parte, vom Încheiați conversația despre problema managementului șoferului, iată câteva sfaturi, trucuri și o poveste. Prima poveste mi-a fost oferită de unul dintre cititorii noștri, Tim Lors, și este un exemplu vizual excelent al problemelor pe care le puteți întâmpina atunci când încercați să gestionați driverele în timpul instalării:

„Acum mai bine de un an, am scris un script software care instalează toate driverele pe un computer WinXP. Problema pe care am întâlnit-o la selectarea driverelor nu era legată de sistemul de operare. A fost eșecul producătorului de a implementa corect PnP între fișierele lor inf driver și hardware. Mai exact, fișierul inf a indicat că a fost cel mai bun driver pentru un anumit dispozitiv hardware, când, de fapt, nu funcționa cu un astfel de dispozitiv.Singura modalitate de a selecta un driver potrivit într-o situație atât de dificilă era compararea numerele de identificare PnP ale echipamentului hardware cu o listă de drivere problematice cunoscute și, dacă am găsit o potrivire, am selectat manual driverul corespunzător pe baza unor criterii suplimentare, de obicei numărul modelului PC-ului. Cele mai frecvente criterii suplimentare necesare pentru selecția „lasă-mă să decid” a fost numărul modelului PC-ului, dar uneori includeau versiunea BIOS și ID-ul subsetului PnP, iar în unele cazuri rare a fost încercare și eroare. Desigur, încercarea și eroarea este destul de dificilă, deoarece atunci când Windows a instalat driverul pe care l-a considerat cel mai potrivit, a trebuit să izoleze driverul care nu funcționează de Windows, sau pur și simplu sistemul l-a reinstalat. Vă rugăm să rețineți că această situație a avut loc într-un mediu care conținea aproape 10.000 de PC-uri din peste 25 de modele diferite.”

Majoritatea profesioniștilor IT cu care am vorbit mi-au spus că șoferii sunt una dintre cele mai mari dureri de cap, iar povestea de mai sus doar arată asta. Deci, după ce am dedicat ultimele patru părți acestui subiect, vreau să închei discuția despre șoferi cu câteva sfaturi și trucuri care vă vor ajuta să vă ușureze viața.

Căutați șoferi

Prima provocare este găsirea driverelor independenți pe care sistemele dvs. le pot avea nevoie. Unii producători fac acest lucru ușor, alții nu, iar Dell face parte din primul grup deoarece oferă drivere pentru fiecare sistem desktop sub forma unui fișier .cab pentru fiecare sistem de operare. Pentru a descărca aceste fișiere .cab, accesați http://www.delltechcenter.com/ și din meniul de derulare din stânga, selectați Acasă, Microsoft, Microsoft System Center, SCCM " System Center Configuration Manager, Dell Business Client Operating System Deployment , Dell Business Client Operating System Deployment „Fișierele .CAB și veți vedea pagina prezentată în Figura 1:

Figura 1: Descărcarea driverelor pentru sistemele client Dell ca fișiere .cab

Odată ce fișierul .cab este descărcat, îl puteți extrage într-un folder, apoi faceți referire la acel folder atunci când importați drivere în partajarea dvs. de instalare.

Alți producători oferă și instrumente pentru descărcarea driverelor, dar, în opinia mea, aceste instrumente nu sunt la fel de simple sau convenabile precum abordarea Dell. Iată câteva exemple de astfel de instrumente și link-uri către acestea:

Extragerea fișierelor INF din EXE

Uneori, producătorii de sisteme oferă drivere de dispozitiv sub formă de fișiere .exe, mai degrabă decât fișiere .cab. În acest caz, un set excelent de instrumente este WinRAR, care vă permite să extrageți fișierele driver dintr-un fișier .exe într-un folder. Rețineți, pentru a importa un driver, MDT necesită un fișier .inf și fișierele driver corespunzătoare; nu este posibil să importați un fișier .exe ca driver.

Prevenirea pornirii șoferilor

Pentru a preveni activarea unui driver pe care l-ați importat (de exemplu, dacă testele dvs. arată că driverul cauzează probleme după instalare), pur și simplu deschideți proprietățile driverului și ștergeți câmpul Activați acest driver (Figura 2):

Figura 2: Puteți dezactiva sau permite activarea driverului

Vă rugăm să rețineți că driverul de mai sus a fost proiectat pentru Windows pe 32 și 64 de biți. Dacă descoperiți că nu funcționează sub Windows pe 64 de biți, puteți lăsa driverul activat, dar debifați x64, ceea ce va împiedica activarea acestuia în timpul instalării Windows pe 64 de biți.

Dacă doriți, puteți chiar să dezactivați toate driverele dintr-un folder dezactivând folderul (Figura 3):

Figura 3: Puteți dezactiva un folder personalizat din resursa de instalare

Gestionarea driverelor de pornire utilizând profiluri de selecție

De asemenea, puteți utiliza profiluri de selecție pentru a gestiona driverele în timpul fazei de pornire Windows PE a unei instalări LTI. Pentru a face acest lucru, deschideți proprietățile resursei dvs. de instalare și selectați fila Windows PE x64 Components sau Windows PE x86 Components pentru a gestiona driverele pentru arhitectura sistemului de operare pe care îl instalați (Figura 4):

În mod implicit, este selectat profilul de selecție Toate driverele și pachetele, dar numai driverele de rețea și de stocare din acest profil de selecție sunt incluse în imaginea de pornire Windows PE. Dacă este necesar, vă puteți crea propriul profil de selecție care va include drivere specifice pentru hardware WinPE pentru sistemele dvs. țintă.

Utilizarea mai multor grupuri de drivere pentru a instala după marcă și model

În partea anterioară, am analizat cum să definim un grup de drivere numit DriverGroup001 și să îl folosim pentru a gestiona driverele în timpul instalării pe baza mărcii și modelului computerelor țintă. Keith Garner, System Deployment Specialist la Xtreme Consulting Group, are o postare excelentă care oferă mai multe informații despre acest subiect și vă arată cum puteți organiza driverele mai eficient și apoi utilizați mai multe grupuri de drivere pentru a gestiona modul în care sunt activate în timpul instalării.

O altă postare utilă este această postare despre utilizarea aliasurilor de model, scrisă de Michael Mergolo, consultant senior la Microsoft Consulting Services.

Adăugarea de drivere la imagine

Puteți utiliza comanda DISM.exe pentru a adăuga drivere la imaginile offline; pur și simplu montați imaginea și utilizați comanda DISM cu opțiunea /add-driver (consultați mai multe informații despre utilizarea DISM.exe).

Pentru a adăuga drivere în magazinul de drivere (adică, pre-reprezentați driverele astfel încât acestea să fie disponibile atunci când Windows identifică dispozitivele care au nevoie de drivere), puteți utiliza comanda PnPutil.exe. Această comandă poate fi utilă dacă, de exemplu, ați folosit Microsoft Update Catalog pentru a descărca un fișier .cab de drivere de imprimantă și doriți să preprezentați acele drivere pe computerul dvs. de referință, astfel încât acele drivere să fie disponibile în timpul instalării. Mai multe informații despre această comandă pot fi găsite în și.

Menținerea configurației driverului în timpul Windows Imaging

În cele din urmă, dacă creați o imagine de referință și o instalați pe hardware identic, puteți oferi utilizatorilor o experiență de pornire mai rapidă la prima pornire, configurând parametrii PersistAllDeviceInstalls din fișierul dvs. de răspuns pentru a face sysprepping mașina de referință. Vezi detalii

Dispozitivele și driverele pentru acestea sunt împărțite în două categorii: cu și fără suport PnP. Pentru majoritatea dispozitivelor PnP, un driver este inclus pe CD-ul Windows Server 2003. Când instalați un dispozitiv nou, sistemul găsește automat un driver pentru acesta și îi alocă resurse (IRQ-uri și canale de acces direct la memorie DNA). Dacă sistemul nu poate găsi un driver adecvat, acesta va solicita utilizatorului să îl introducă, iar dispozitivul din consola Task Manager va fi marcat cu un semn de exclamare într-un triunghi galben. Dacă sistemul nu poate determina deloc tipul de dispozitiv, atunci cererea de driver nu este emisă și dispozitivul este marcat cu un semn de întrebare într-un triunghi galben ca necunoscut.

Pentru a actualiza configurațiile dispozitivului, utilizați snap-inul Device Manager. Poate fi folosit în două forme: cu un arbore de dispozitive, cu un arbore de resurse pentru dispozitive (nu este recomandată configurarea manuală a resurselor). Complementul Device Manager poate fi utilizat pentru a edita configurația numai pe computerul local; pe computerul de la distanță funcționează în modul doar citire. Pentru a obține un rezumat detaliat al dispozitivelor și driverelor, puteți utiliza utilitarul de linie de comandă DriverQuery.

Administratorii de computere pot instala orice dispozitive și drivere. Utilizatorii obișnuiți pot instala drivere în următoarele cazuri: driverul este semnat digital, fișierele driverului sunt deja pe computer și instalarea ulterioară nu necesită intervenția suplimentară a utilizatorului și toate cele trei condiții trebuie îndeplinite simultan (aceste condiții sunt de obicei adevărate pentru imprimante , dispozitive USB și pentru magistrala IEE1394).

Începând cu Windows 2000, driverele de dispozitiv au o semnătură digitală care arată că fișierul nu a fost modificat în timpul utilizării. Este posibil ca unele șoferi să nu fie semnate digital. Dacă driverul nu este semnat, puteți configura trei opțiuni pentru ca sistemul să acționeze: Skip (instalați driverul chiar dacă nu există semnătură. Disponibil doar pentru administrator), Warn (întreaba utilizatorul dacă instalează driverul), Block. (nu instalează drivere fără semnătură digitală).

În snap-in-ul Device Manager, puteți actualiza driverele pentru dispozitivul selectat (de exemplu, dacă producătorul a lansat o nouă versiune). Dacă, după instalarea unui nou driver, apar probleme în funcționarea dispozitivului, puteți reveni la versiunea anterioară a driverului făcând clic pe butonul Rollback. De asemenea, puteți șterge drivere pentru dispozitive (dacă este un dispozitiv PnP, ștergerea driverului va presupune ștergerea dispozitivului în sine; dacă driverul dispozitivului a fost adăugat manual, acesta va rămâne în sistem, dar fără un driver configurat. Dacă dispozitivul are proprietăți suplimentare cu care îl puteți configura, accesul la acestea se va efectua cu aceleași drepturi ca și Managerul de activități. De asemenea, puteți restricționa accesul la astfel de setări folosind Politica de grup.

Dacă apar probleme cu funcționarea dispozitivelor, puteți utiliza următoarele mijloace: returnarea versiunii anterioare a driverului (dacă sistemul pornește), încărcarea ultimei configurații reușite (va funcționa dacă problema a apărut înainte de ultima conectare cu succes), în siguranță modul (încarcă un set minim de drivere și subsisteme (după pornire, îl puteți dezactiva în Device Manager), consola de recuperare (utilizată dacă toate cele de mai sus nu au efect, vă permite să gestionați dispozitivele și driverele din linia de comandă, dar trebuie să cunoașteți numele dispozitivului sau fișierul driverului).Când apar erori ale dispozitivului, codurile sunt afișate în stările Manager dispozitive care vă permit să determinați tipul de eroare.Descrierile codurilor pot fi găsite în sistemul de ajutor Windows.

Pentru cei care sunt interesați de structura internă a sistemului de operare, le propun o mică cercetare. Vom încerca să aflăm care este responsabil pentru ordinea în care sunt încărcate șoferii și serviciile și dacă această ordine poate fi modificată.

În primul rând, să ne uităm la ordinea curentă de pornire a sistemului utilizând programul LoadOrder de la Sysinternals. Programul ne va arăta ce este încărcat și în ce ordine când pornește sistemul de operare.

După cum se poate observa din figură, mai întâi sunt încărcate driverele de dispozitiv necesare pentru a porni sistemul, iar apoi diverse servicii. Deoarece există unele diferențe între serviciile de încărcare și șoferii de încărcare, le vom lua în considerare separat.

Șoferii

Să luăm șoferul drept subiect de testare. Microsoft ACPI (Configurație avansată și interfață de alimentare), care este responsabilă pentru descoperirea hardware-ului și gestionarea energiei. Sarcina ACPI este de a permite comunicarea între sistemul de operare și hardware, astfel încât driverul ACPI este încărcat chiar de la început.

Programul Loadorder oferă informații destul de limitate despre ordinea de încărcare, așa că mergem la registru pentru date mai precise. Fiecare driver și serviciu Windows are propria sa secțiune în ramura de registry HKLM\SYSTEM\CurrentControlSet\Services. Secțiunile sunt denumite după numele driver/serviciu, așa că avem nevoie de secțiunea ACPI.

Trei parametri de registry controlează ordinea în care este încărcat driverul. Parametrul principal start- determină tipul de pornire a driverului. Iată regulile prin care șoferii setează valoarea parametrului Start:

Driverele care trebuie să fie încărcate de încărcătorul de pornire la pornirea sistemului de operare specifică o valoare Start de 0 (pornire la pornirea sistemului). Un exemplu sunt driverele de magistrală de sistem și un driver de sistem de fișiere utilizate la pornirea sistemului;
Un driver care nu este necesar direct pentru a porni sistemul specifică o valoare de pornire de 1 (pornită de sistem). Exemplu - driverul plăcii video standard (VgaSave);
Driverul, care nu este necesar pentru a porni sistemul, setează valoarea Start la 2 (pornire automată). Un exemplu este un driver pentru un Multiple UNC Provider (MUP) care acceptă nume UNC ale resurselor de la distanță (cum ar fi \\Computer\Share);
Driverele care nu sunt necesare pentru ca sistemul de operare să funcționeze (de exemplu, driverele adaptoarelor de rețea) specifică valoarea Start ca 3 (pornire la cerere).

Driverele de dispozitiv pot utiliza, de asemenea, parametri grupȘi Etichetă pentru a controla ordinea de pornire când sistemul pornește. Șoferii\serviciile folosesc parametrul Grup pentru a indica grupul căruia îi aparțin, iar ordinea în care sunt încărcate grupurile este determinată de parametru Listă situat în secțiunea HKLM\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\.

Apropo, parametrul Grup nu este necesar. Dacă driverul/serviciul nu este inclus în niciun grup, atunci acesta este încărcat chiar la sfârșitul cozii.

Driverul își poate regla în continuare ordinea de pornire folosind parametrul Etichetă, care precizează poziția specifică a șoferului în grup. Managerul I/O sortează driverele din grup după valoarea acestui parametru, iar driverele care nu au un parametru Tag sunt mutate în partea de jos a listei de drivere din grup.

Privind ordinea de încărcare, s-ar putea să credeți că driverele cu valori Tag mai mici sunt încărcate mai întâi, apoi cele cu altele mai mari, dar acest lucru nu este în întregime adevărat. Prioritatea valorilor parametrilor Tag într-un grup este determinată în secțiunea HKLM\SYSTEM\CurrentControlSet\Control\GroupOrderList.

De exemplu, să deschidem parametrul binar Boot Bus Extender, care corespunde grupului cu același nume, căruia îi aparține driverul ACPI. Parametrul este un set de cuvinte duble (4 octeți fiecare). Primul cuvânt (evidențiat cu roșu) specifică lungimea totală a variabilei (numărul de cuvinte duble), în exemplul nostru 06. Cuvintele duble rămase sunt doar etichete. Driverul ACPI are o etichetă egală cu 01 (evidențiată în verde).

Prioritatea etichetei este determinată nu după valoarea etichetei, ci după poziția acesteia: cu cât eticheta este amplasată mai sus, cu atât este mai mare prioritatea acesteia în grup și cu atât este mai mare prioritatea șoferului căruia îi corespunde această etichetă. Și deoarece 01 este mai mare decât celelalte etichete, driverul ACPI este încărcat primul în grup.

Servicii

Ordinea în care sunt încărcate serviciile Windows este oarecum diferită de ordinea în care sunt încărcate driverele. Să luăm ca exemplu serviciul de actualizare automată (wuauserv). Nu este deosebit de critic pentru funcționarea sistemului și, prin urmare, este încărcat ultimul.

Să mergem din nou la registru. Parametrii de pornire a serviciului sunt localizați în secțiunea HKLM\SYSTEM\CurrentControlSet\Services\wuauserv. Am identificat doi parametri principali care sunt responsabili pentru ordinea de încărcare a acestui serviciu.

Serviciile Windows sunt pornite de Service Control Manager (SCM) în funcție de valoarea parametrului start. Acest parametru pentru servicii poate lua următoarele valori:

Pornire automată (2) - serviciul pornește automat, imediat după începerea procesului SCM principal Services.exe;
Lansare la cerere (3) - serviciul începe atunci când este necesar, la solicitarea oricărui serviciu sau program;
Dezactivat (4) - serviciul este dezactivat și nu va porni în niciun caz.

Valorile 0 (pornire la pornirea sistemului) și 1 (pornire prin sistem) pentru servicii nu pot fi specificate, doar pentru driverele de dispozitiv.

În plus, începând cu Windows Vista\Server 2008, a apărut un alt mod de lansare pentru servicii - pornire automată întârziată. Parametrul este responsabil pentru el DelayedAutoStart = 1, care indică SCM să pornească automat acest serviciu cu o întârziere.SCM pornește servicii pentru care este selectată pornirea întârziată după încărcarea serviciilor marcate pentru pornire automată.

Modul de lansare a serviciului poate fi controlat nu numai din registru, ci și în modul grafic, din consola Servicii.

La fel ca șoferii, serviciile Windows pot folosi parametrul Grup din cheia lor de registry pentru a indica grupul căruia îi aparțin. Acum, pentru claritate, să luăm serviciul nostru wuauserv, situat la sfârșitul listei de descărcare. Folosind cheia de grup, o vom plasa în grupul Jurnal de evenimente, vom reporni și vom privi ordinea de încărcare în Loadorder. După cum puteți vedea, ordinea s-a schimbat și wuauserv a urcat de pe ultimul loc, încărcându-se imediat după colegul său de clasă - serviciul de jurnal de evenimente. Adevărat, ordinea de plasare în cadrul grupului nu poate fi modificată, deoarece Eticheta nu este folosită pentru servicii.

Și încă un parametru care afectează indirect ordinea în care sunt încărcate serviciile - DependOnService. Indică de ce servicii depinde serviciul. În consecință, serviciul nu este încărcat până când serviciile enumerate în DependOnService nu sunt încărcate.

Dependențe funcționează după cum urmează - dacă serviciile sunt în același grup, atunci serviciul dependent este mutat la sfârșitul listei și începe după serviciile de care depinde. Dacă grupurile sunt diferite, atunci serviciul pur și simplu nu va porni și SCM va genera o eroare.

Acest lucru este arătat mai clar în snap-in-ul Servicii, unde fila Dependență listează atât serviciile de care depinde un anumit serviciu, cât și serviciile care depind de el.

Deoarece Windows este un sistem multitasking, exclude astfel de libertăți pentru programele de aplicație, cum ar fi accesarea directă a porturilor I/O sau gestionarea întreruperilor hardware. Interacțiunea cu hardware-ul la un nivel scăzut poate fi efectuată numai de programele de sistem care rulează în modul privilegiat. Driverele de dispozitiv joacă un rol major aici.

Windows folosește o structură de drivere cu mai multe niveluri în care driverele de nivel înalt pot acționa ca filtre care efectuează procesări speciale asupra datelor primite de la sau transmise unui driver de nivel scăzut. Un exemplu ar fi separarea șoferului care controlează magistrala de șoferii pentru dispozitivele specifice conectate la magistrală. Un alt exemplu este un driver care realizează criptarea/decriptarea datelor atunci când lucrează cu sistemul de fișiere NTFS. Structura driverelor la toate nivelurile este supusă standardelor uniforme cunoscute sub numele de WDM (Windows DiverModel), cu toate acestea, driverele de nivel înalt, spre deosebire de cele de nivel scăzut, nu gestionează întreruperile hardware.

Destul de ciudat, în WindowsNT driverele de nivel scăzut nu sunt încă cel mai scăzut nivel de gestionare a dispozitivelor. Și mai aproape de hardware se află așa-numitul nivel HAL (Hardware Abstractions Level). Rolul său este de a ascunde de alte module OS, inclusiv drivere, unele detalii de lucru cu hardware-ul, în funcție de magistralele specifice, tipul plăcii de bază și metoda de conectare. De exemplu, HAL oferă șoferilor posibilitatea de a accesa registrele dispozitivului prin numerele lor logice, fără a ști dacă registrul este conectat la un port de procesor sau la o memorie mapată.

În ciuda standardizării structurii, se pot distinge mai multe tipuri speciale de drivere, care diferă în funcție de funcționalitate.

    Driverele GDI (GraphicDeviceInterface) sunt drivere de nivel înalt pentru dispozitivele grafice (monitoare, imprimante, plotere). Aceste drivere traduc apelurile grafice Windows (cum ar fi trasarea liniei, zona de umplere, textul de ieșire, selectarea fontului curent, creionul curent, umplerea curentă) în comenzi care efectuează acțiuni corespunzătoare pe un anumit dispozitiv. Emiterea acestor comenzi către dispozitiv este efectuată de un alt driver de nivel scăzut. Datorită prezenței driverelor GDI, același program poate scoate imagini grafice pe diferite dispozitive. Un prim exemplu în acest sens este modul de previzualizare disponibil în diferite editori, care afișează paginile pe ecran exact așa cum vor fi tipărite.

    Driverele pentru tastatură și mouse, pe lângă operațiunile standard ale driverului, efectuează încărcare suplimentară. Acestea generează mesaje despre evenimente pe dispozitivul corespunzător (apăsarea și eliberarea tastelor, mișcarea mouse-ului, apăsarea și eliberarea butonului mouse-ului) și le plasează în coada de mesaje a sistemului. Sistemul transmite apoi fiecare mesaj către procesul pentru care a fost destinat procesării ulterioare.

    Driverele de virtualizare a dispozitivelor (driverele VxD) servesc la partajarea dispozitivelor între procese, creând iluzia că procesul are proprietatea exclusivă asupra dispozitivului. De fapt, șoferul organizează o coadă de solicitări din procese, comută dispozitivul în modul necesar pentru următorul proces etc. Un exemplu ar fi un driver de virtualizare a monitorului. O aplicație de consolă (de exemplu, un program MS-DOS) funcționează cu întregul ecran în modul text. Dar dacă o astfel de aplicație este lansată într-o fereastră Windows, atunci driverul VxD simulează modul text în grafică. Pentru a face acest lucru, șoferul trebuie să intercepteze încercările programului de a accesa direct adresele memoriei video și să convertească coordonatele locațiilor familiare în modul text în coordonatele pozițiilor corespunzătoare din fereastră.