Блог за прозорци

На другия ден се чудех при какви условия има възстановяване полезност обувка екран (Startup Repair). изтегляне Recovery този автоматизиран инструмент, който открива голям брой често срещани проблеми зареждане на Windows и се опитва да ги поправи автоматично. Тази функционална характеристика на новите версии на Windows често са сериозно липсва потребители, защото в очакване на края на процеса на възстановяване може да се извършва повече от една дузина минути, напълно отпадане на работния процес от доста дълго време. Възстановяване на самата програма със сигурност интересно, но това е тема за друга статия, но в този момент аз просто исках да разбера при какви условия се стартира. Предполага се, че на екрана се появява само когато внезапно изключване. Тази версия се веднага поставя под въпрос, тъй като паметта ми изплува примери за ситуации, когато потребителите се оплакват от автоматичното възстановяване обувка, дори с нормална (на външен вид) изключване. За да разберете причините движат възстановяването обувка бе решено да се проведе един малък експеримент. Бих искал само да спомена, че този материал трябва да се разглежда във връзка с SP1 операционната система Windows 7, тъй като всички тестове са извършени точно на тази конфигурация, следователно, трябва да знаете, че в други версии на ситуацията може да се промени драстично.

Реших да започнете да търсите за изходния код на неопаковани bootmgr.exe файл. И все пак, в крайна сметка, най-много, че нито е в началния етап на натоварване. Необходимата информация в интернет, намерих и не може, и защо е необходимо да се започне! Като се има предвид, че в различните прозорци на английските версии на системата, видях имената на инструмент за възстановяване и ремонт на стартиране. Току-що реши да търси думи, "възстановяване" на (възстановяване) и ремонт (определи, ремонт), но просто търсене за изходния код на мен подобно нещо не може да бъде намерен, във файла не се споменава за възстановяване. Следваща отидох до изходния код разглоби Winload.exe всички в една и съща IDA и просто реших да потърся всички една и съща дума "възстановяване". Обява файла ми е намерено променлива avtoimenovannaya Disassembler като aRecoveryTrue. , което има значение за възстановяване = вярно, и които в кода, посочен две функции: OslpDisplayAutoAdvMenu и OslpDisplayAdvancedBootMenu. Трябва ли да бъде опция в конфигурацията на зареждане, на която Winload.exe код. очевидно, трябва да произвежда някои действия за възстановяване на здравето. Да предположим, че това е то! Позовавайки се на някои вътрешни критерии, Хвърлих втора функция и се концентрира върху функцията на име OslpDisplayAutoAdvMenu. който се нарича от OslpDisplayAdvancedOptionsProcess. а тя, от своя страна, наречена от основната функция OslpMain.

Доплащане: OslpDisplayAdvancedOptionsProcess функция е интересно, защото чрез нея има функция на повикване OslpDisplayAdvancedBootMenu, който показва допълнително меню услуга, включително и в менюто за възстановяване. Търси чрез своя код, се натъкнах на една опции поиска кода за обозначаване BCD 14000008h елемент. Установено е, че идентификаторът е името на BcdLibraryObjectList_RecoverySequence (BCDE_LIBRARY_TYPE_RECOVERY_SEQUENCE) или recoverysequence и изброява идентификаторите GUID, които сочат към елементите, за да заредите за възстановяване на околната среда. Изпълнете команда BCDEDIT / Enum всички, имам пълен списък с идентификатори, поставени в магазина BCD, сред които съм се срещал и recoverysequence символично име и свързания с идентификатор 8be0cdd3-7c4b-11e3-b403-24be05175d79, който посочи пътя [C]: \ възстановяване \ 8be0cdd3-7c4b-11e3-b403-24be05175d79 \. Заедно този маршрут, на главния winre.wim файлът е системното устройство. и което представлява среда за възстановяване. Сега поне се разбере къде да се търси код за възстановяване. )

Но обратно към историята на основната линия. Така че, точно над кода в OslpMain функцията Намерих някои условия на преход, при които функцията OslpDisplayAdvancedOptionsProcess получава контролира или не. Тези условия са резултат от работата с изходни параметри функция OslpGetBootStatusData. които според моите предположения, както и името, той приема и проверява състоянието на изтегляне. В функция, наречена функция OslpGetBootStatusData OslpGetSetBootStatusData. който, както изглежда, и работи с определен статус на източника. Така че това, което е източник на състоянието? Като се започне разглеждане функция код, открих препратка към bootstat.dat файл. и тъй като този файл ме хвана доста често, си спомних, че познанията ми за това са ограничени до разбирането, че това е файл, който съхранява статут за сваляне, нищо повече за него, аз не знаех. В уеб изчерпателно описание на това, че не са изпълнени, така че се опитайте да предложи свое определение:

Boot статут на данните (BSD) или Boot Статус File - статут на изтегляне на данни, които съдържат информация за системата преминава през различните етапи от жизнения цикъл, включително етапите на стартиране и изключване. Тези данни се използват за откриване на операционната система етапи зареждане грешка / приключване на опции за възстановяване на потребителя по време на зареждане, или стартира автоматично среда за възстановяване. Това е глобален статут на всички натоварване извън режима. Да не се бърка с BCD!.

В допълнение към това, както ще бъде показано по-долу, на състоянието на натоварване на файла съдържа разнообразни допълнителна информация. Ако си спомням правилно, файлът ще се появи в операционната система Windows XP, но неговото значение за хода на времето системата е ясно променя.
Спомних си, че Bootmgr също така работи с файла, поне в паметта ми остава непоколебим върху усещането. Връщайки се към кода и търсене на Bootmgr bootstat.dat файл. Уверих се, че това наистина се случва на обжалване чрез функция BmpInitializeBootStatusDatalog. това означава, че започва да се използва дори и преди на сцената Winload.exe. на сцената Bootmgr. Функцията код BmpInitializeBootStatusDatalog се нарича:

Тази логика може да се проследи до следния кодов фрагмент:

Истината - BSD запазен запис на предишната сесия;
Лъжите - BSD файл се връща на всяка сесия.

Оказва се, че записите на bootstat.dat файл се съхраняват в конфигурацията на зареждане (BCD).

Но тук аз бях разтревожен, докато Winload.exe bootstat.dat се отнася за файл, без да уточнява изрично начин, по отношение на един вид устройство за зареждане, тук Bootmgr код се отнася до \ зареждане \ bootstat.dat с пълния път.

Отново, това може да е какво да кажа, мога да бъдат объркани със заключенията, тъй като дълбочината на разбиране на кода, имам малко. Независимо от това, след откриването на този конкретен съзнание промъкнал неясно подозрение поради факта, че кодовете за различните етапи на натоварване използват различни bootstat.dat файлове. След това реших да се търси файл в други местоположения и да го намери в% SystemRoot% \ bootstat.dat. Това става по-интересно. Тя изисква потвърждение, за тази цел се използва наблюдава процеса с активирана опцията "Enable Boot Logging" и резултатите са били филтрирани рестартиране събития запис на целевата стойност "bootstat":

Блог за прозорци

Гледайки снимката може да се каже, че е определено различни файлове :), а това може да направи две предположения:

  • File \ зареждане \ bootstat.dat. разположен на отделен дял система запазени, използвайте само модули етапи товарене и служи за предаване на информация за състоянието на различните фази на натоварване.
  • Файлът% SystemRoot% \ bootstat.dat използва компоненти на операционната система, на различни етапи от товарене / край.

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

структура bootstat.dat

Аз бях най-голям интерес във файла, отнасяща се до системата, а не да се оттегли натоварване. Затова реших да се започне с файла% SystemRoot% \ bootstat.dat на. Ами, първото нещо, което правим, така че е най-накрая внимание на съдържанието на файла:

Блог за прозорци

Първият 10h (16) байта се очаква да бъде заглавие:

винаги 0, целта е неизвестна.

Въз основа на нашите предположения, че при сегашното състояние на нашето присъствие в файл C на: \ Windows \ bootstat.dat два записа присъстват. Не е достатъчно веднъж за глобалното състояние на натоварване / приключване на преписката, не е тя?

експеримент

  • Файлът не е ключова роля като въпроси тригер система жизнения цикъл;
  • Bootmgr / Winload код отговаря само за определени стойности на някои параметри в bootstat.dat на файл, който аз не мисля да се промени.

Въпреки това, по-нататъшни експерименти, проведени след написването на тази статия, ми даде идеята, че започване на започнат да се изтеглят среда за възстановяване може да се случи както на условията в Winload.exe код. и в код модули трети страни, които могат да променят BCD файл чрез API на всеки, всъщност излагане опция за възстановяване опция по подразбиране, когато стартиране на системата, като по този начин за започване на стартиращи средства без намесата на потребителя. Остава да се намери тези условия. Темата не е затворен!

Сходни публикации: