Blog pentru ferestre
Alaltăieri întrebat în ce condiții există ecran de boot utilitar de recuperare (Reparare la pornire). Recuperare descărcare acest instrument automat, care detectează un număr mare de probleme comune de boot Windows și încearcă să le stabilească în mod automat. Această caracteristică funcțională a versiunilor recente de Windows sunt de multe ori lipsesc serios utilizatori, deoarece în anticiparea de la sfârșitul procesului de recuperare poate fi efectuat mai mult de o duzină de minute, complet abandon din fluxul de lucru pentru un timp destul de lung. Restaurare utilitate în sine cu siguranță interesant, dar acesta este un subiect pentru un alt articol, dar în acel moment am vrut doar să aflu în ce condiții este lansat. S-a sugerat că ecranul apare numai atunci când o oprire bruscă. Această versiune a fost imediat pusă sub semnul întrebării, deoarece memoria mea au apărut exemple de situații în care utilizatorii au plâns cu privire la auto-recuperare de boot, chiar și cu oprire normală (în aparență). Pentru a afla motivele pentru a rula recuperarea de boot sa decis să efectueze un mic experiment. Aș menționa doar că acest material ar trebui să fie luate în considerare în raport cu sistemul de operare Windows 7 SP1, deoarece toate testele au fost efectuate tocmai pe această configurație, prin urmare, să fie conștienți de faptul că, în alte versiuni ale situației ar putea schimba în mod dramatic.
Am decis să înceapă căutarea pentru codul sursă neambalate bootmgr.exe fișier. Cu toate acestea, la urma urmei, cel mai mult că nici nu este pe faza inițială a încărcării. Informațiile necesare de pe web, am găsit și nu au putut, și de ce a fost necesar pentru a începe! Având în vedere faptul că, în diferite ferestre ale versiunilor în limba engleză a sistemului, am văzut numele de instrument de recuperare și de reparații de pornire. M-am decis să caute cuvintele „recuperare“ (recuperare) și reparații (repara, reparare), ci o simplă căutare pentru codul sursă pentru mine ceva de genul asta nu a putut fi găsit, în dosarul nu a existat nici o mențiune cu privire la o recuperare. Pe lângă M-am dus la codul sursă dezasamblat Winload.exe toate în același IDA și doar a decis să se uite toate același cuvânt „recuperare“. Listarea fișierul meu a fost găsit variabila dezasamblor avtoimenovannaya ca aRecoveryTrue. că recuperarea a contat = adevărat și care, în codul menționat la două funcții: OslpDisplayAutoAdvMenu și OslpDisplayAdvancedBootMenu. Ar trebui să fie o opțiune în configurația de pornire pe care codul Winload.exe. aparent, ar trebui să producă o anumită acțiune pentru a restabili sănătatea. Să presupunem că acest lucru este! Bazându-se pe anumite criterii interne, am aruncat-o a doua funcție și sa axat pe funcția numită OslpDisplayAutoAdvMenu. care este numit de la OslpDisplayAdvancedOptionsProcess. și ea, la rândul său, numit de principala OslpMain funcția.
Supliment: Funcția OslpDisplayAdvancedOptionsProcess este interesant, deoarece prin ea există o funcție OslpDisplayAdvancedBootMenu de apel care afișează meniul de servicii suplimentare, inclusiv meniul de recuperare. Privind prin codul său, am dat peste un opțiuni cere desemnarea codului elementului BCD 14000008h. Sa constatat că identificatorul este numele BcdLibraryObjectList_RecoverySequence (BCDE_LIBRARY_TYPE_RECOVERY_SEQUENCE) sau recoverysequence și listează identificatorii GUID care indică elementele pentru a încărca mediul de recuperare. Rulați comanda Bcdedit / enum tot, am primit o listă completă de identificare plasate în magazin BCD, printre care l-am cunoscut și recoverysequence numele simbolic și identificatorul asociat 8be0cdd3-7c4b-11e3-b403-24be05175d79, care a indicat calea [C]: \ Recuperare \ 8be0cdd3-7c4b-11e3-b403-24be05175d79 \. De-a lungul acestui traseu, pe fișierul principal winre.wim este unitatea de sistem. și care reprezintă mediul de recuperare. Acum, cel puțin în cazul în care înțeleg să caute codul de recuperare. )
Dar, înapoi la povestea liniei principale. Deci, chiar deasupra codul din OslpMain funcția am găsit niște condiții de tranziție în care o OslpDisplayAdvancedOptionsProcess funcție devine de control sau nu. Aceste condiții sunt rezultatul lucrului cu parametrii de ieșire funcția OslpGetBootStatusData. care, potrivit presupuneri mele, și numele, acesta primește și verifică starea de descărcare. În funcție numită funcția OslpGetBootStatusData OslpGetSetBootStatusData. care, aparent, și operează cu un anumit statut al sursei. Deci, ce este sursa statutului? Pornind de navigare codul funcție, am găsit o referință la bootstat.dat fișier. și din moment ce acest fișier ma prins destul de des, mi-am amintit că cunoștințele mele de ea au fost limitate la înțelegerea că acesta este un fișier care stochează o stare de descărcare, nimic mai mult despre asta, nu știam. În web descrierea exhaustivă a nu l-am întâlnit, așa că încearcă să ofere o definiție personală:
Date Boot stare (BSD) sau Boot Stare fișier - starea de descărcare a datelor, care conțin informații despre sistemul trece prin diferitele etape ale ciclului de viață, inclusiv etapele de pornire și oprire. Aceste date sunt utilizate pentru a detecta sistemul de operare etape de boot de eroare / completarea opțiunilor de recuperare pentru utilizator la boot, sau în mod automat a porni mediul de recuperare. Este un statut global al tuturor modurilor de încărcare-off. A nu se confunda cu BCD!.
În plus față de acest lucru, după cum va fi prezentat mai jos, starea de încărcare a fișierului conține o varietate de informații suplimentare. Dacă îmi amintesc corect, fișierul va apărea în sistemul de operare Windows XP, dar semnificația sa pentru cursul timpului sistemul este în mod clar în schimbare.
Mi-am amintit că Bootmgr de asemenea, funcționează cu fișierul, cel puțin în memoria mea la rămâne statornic pe sentimentul. Revenind la codul și căutați fișierul bootstat.dat Bootmgr. M-am asigurat că este într-adevăr de gând să facă apel prin funcția BmpInitializeBootStatusDatalog. adică, ea începe să fie folosit chiar înainte de etapa Winload.exe. pe scena Bootmgr. Funcția BmpInitializeBootStatusDatalog cod este numit:
Această logică poate fi urmărită la următorul fragment de cod:
Adevărul - BSD păstrat evidența sesiunii precedente;
Lies - fișier BSD este resetat la fiecare sesiune.
Se pare că înregistrările bootstat.dat fișier este stocat în configurația de boot (BCD).
Dar aici am fost alarmat în timp ce Winload.exe bootstat.dat se referă la un fișier fără a specifica un mod explicit, cu referire la un tip de dispozitiv de pornire, aici Bootmgr cod se referă la \ de boot \ bootstat.dat cu calea completă.
Din nou, acest lucru poate fi nimic de spus, aș putea fi confundat cu concluziile, deoarece adâncimea de înțelegere a codului, am un pic. Cu toate acestea, după descoperirea acestei conștiințe special furișat suspiciune vagă din cauza faptului că codurile pentru diferitele etape de încărcare folosesc diferite fișiere bootstat.dat. După aceea, am decis să caute un fișier în alte locații și a găsit-o în% SystemRoot% \ bootstat.dat. Devine mai interesant. Este nevoie de o confirmare, în acest scop, a fost utilizat Process Monitor cu opțiunea activată „Enable Boot Logging“, iar rezultatele au fost filtrate evenimente de înregistrare repornire cu valoarea țintă „bootstat“:
![Blog pentru ferestre (o stare de încărcare) Blog pentru ferestre](https://webp.images-on-off.com/27/268/434x539_i5vt91bs4c7t2zsmhpe3.webp)
Privind la captura de ecran se poate spune că este cu siguranță diferite fișiere :), și care pot face două ipoteze:
- Fișier \ de boot \ bootstat.dat. situat pe un sistem de partiție separată Rezervat, utilizați numai module etape de încărcare și servește pentru a transmite informații de stare între diferitele faze ale sarcinii.
- Fișierul% SystemRoot% \ bootstat.dat utilizate componente ale sistemului de operare în diferite stadii de încărcare / terminare.
Din nou, nici măcar nu se uită la ea, pentru a face orice concluzii au fost prematura, deoarece, chiar dacă descoperirea celui de al doilea fișier, în primul rând implicarea sa în restaurarea sistemului trebuie să fie dovedită. Și, dintr-o dată, în ciuda faptului că el a folosit codul pentru unele componente ale sistemului pentru funcționarea sistemului de operare, nu transporta o sarcină importantă pentru a restabili mediul înconjurător?
structura bootstat.dat
Am fost cel mai interesat în dosarul privind sistemul, nu la pasul de încărcare. Așa că am decis să înceapă cu fișierul% SystemRoot% \ bootstat.dat. Ei bine, primul lucru pe care o facem, deci este în cele din urmă o privire la conținutul fișierului:
![Blog pentru ferestre (doar a decis să caute) Blog pentru ferestre](https://webp.images-on-off.com/27/268/434x488_30euxtulzf2m037el8cy.webp)
Primul 10h (16) bytes ar trebui să fie titlu:
întotdeauna 0, scop necunoscut.
Bazat pe ipoteze noastre, în stadiul actual al prezenței noastre în fișierul C: \ Windows \ bootstat.dat două intrări sunt prezente. Nu este suficient o dată pentru starea de încărcare / finalizare globală a fișierului, nu-i așa?
experiment
- Fișierul nu este un rol-cheie ca un ciclu de declanșare probleme de viață al sistemului;
- Codul Bootmgr / WinLoad răspunde doar la anumite valori ale anumitor parametri în bootstat.dat fișier care nu m-am gândit să se schimbe.
Cu toate acestea, alte experimente efectuate după scrierea acestui articol, mi-a dat ideea că începerea inițierea descărcarea în mediul de recuperare poate avea loc atât în condițiile în codul Winload.exe. și în modulele de cod terțe părți care pot modifica fișierul BCD prin API-ul de orice, opțiune de recuperare opțiune de fapt, expunerea în mod implicit atunci când sistemul este pornit, inițiind astfel fondurile de start-up, fără intervenția utilizatorului. Rămâne de a găsi acești termeni. Tema nu este închisă!