ablbd
Membru Senior
Inregistrat: acum 15 ani
|
|
Una dintre metodele de deblocare a unui PNA este editarea secventei de boot (HKLM/init). Din pacate multe aparate au ajuns inutilizabile datorita necunoasterii mecanismului care sta la baza incarcarii programelor in aceasta faza. Postarea are drept scop pe de o parte explicarea "misterelor"legate de HKLM/init si pe de alta parte sa fie un semnal de alarma celor mai putin avizati, care sunt tentati sa modifice "la plesneala"intrari fara a cunoaste consecintele.
Structura pentru multi dintre voi nu este o noutate: apar chei de forma Launchxx si Dependxx, unde xx reprezinta niste numere ZECIMALE. Precizarea este importanta, asa cum se va vedea mai tarziu.
Semnificatia cheilor Launchxx probabil ca va este binecunoscuta: programele necesare sistemului se vor lansa in ordinea crescatoare a numerelor xx. Asta in aparenta, deoarece in anumite conditii nu e chiar asa. Daca ar fi numai atat, ar fi simplu... insa intervin cheile Dependxx. Rolul acestora este mai putin evident si totodata mai putin cunoscut, asa ca vor face obiectul unei discutii mai ample.
Pentru ca sistemul sa poata functiona, are nevoie de cateva programe esentiale (shell, device, gwes, services... in aceasta ordine). Problema este ca executarea unora dintre ele poate avea loc doar daca au fost deja executate inainte alte programe de care cele mai de pe urma depind. Nu vreau sa intru in detaliile functiilor de import si export a unui executabil (de tip exe sau dll). Ajunge sa mentionez ca, desi multe dintre acestea depind explicit doar de coredll.dll, nu pot avea informatiile necesare via coredll.dll daca nu sunt deja prezente executabilele care furnizeaza acele informatii. Asa stand lucrurile, incepe sa se clarifice si rolul cheilor Depend. Aceste chei spun programului al carui numar il poarta ca sa astepte intrarea in executie a programelor de care depind direct sau indirect. E oarecum similar cu constructia unei case: intai pui temelia, apoi ridici peretii si la urma pui acoperisul. Orice alta ordine este imposibila.
Sa analizam acum valorile cheilor "Depend" pentru a vedea cum reglementeaza acestea ordinea corecta de instalare. Am mentionat anterior ca cifrele din componenta cheilor Init si Depend sunt in sistem zecimal, deoarece numai asa vor avea sens valorile cheilor Depend. Valorile sunt de tip binar si fiecare dependenta reprezinta 2 octeti. Prin urmare, daca vedeti acolo 4 octeti, inseamna ca programul aferent trebuie sa astepte 2 programe anterioare lui si sa fie executat abia dupa ce amandoua au confirmat faptul ca sunt deja in executie. Din cei 2 octeti/program doar primul este semnificativ si reprezinta valoarea hexazecimala a numarului de program a carei executare trebuie sa o astepte. De exemplu, daca primul octet are valoarea 0A, inseamna ca acel program nu va fi executat pana cand programul aferent lui Init10 (de regula shell.exe) nu confirma ca este deja in executie. Este nevoie de acest mecanism deoarece procesorul poate face multitasking, incercand sa incarce si urmatoarele programe din lista, chiar inainte ca cele anterioare sa fi fost incarcate integral in memorie si executate. Nu uitati ca memoriile Nand sunt lente!
Propun sa urmarim fenomenul pe un exemplu concret si pe care nu l-am ales tocmai intamplator :
Launch10 shell.exe Launch20 device.exe Depend20 0A 00 Launch30 gwes.exe Depend30 14 00 Launch50 explorer.exe Depend50 14 00 1E 00 Launch60 services.exe Depend60 14 00 Launch90 notifyRep.exe Launch97 GPSMC.exe Depend97 1E 00 Launch98 OVL_Manager.exe Depend98 14 00 1E 00 Launch99 launch.exe Depend99 1E 00
Dupa hard reset, primul program executat va fi shell.exe. Urmeaza device. exe, insa valoarea cheii depend ii spune sa astepte executia celui de la "10" (10.=0x0A), adica pe shell.exe. Al treilea in ordine este gwes.exe, dar va fi executat abia dupa device.exe (depends30 = 0x14, adica 20.). Urmeaza explorer exe, care va astepta atat device exe (0x14=20.) cat si gwes.exe (0x1E=30.). Services.exe depinde doar de gwes, etc. Observati ca notifyrep.exe nu depinde de nimeni, deci probabil ca va fi lansat in executie simultan cu shell.exe. La fel se va intampla si cu programele care depind exclusiv de gwes.exe: vor fi lansate oarecum simultan dupa ce gwes semnaleaza ca este activ...
Poate e mai usor de urmarit secventa dependentelor printr-o reprezentare grafica:
|-----> (gpsmc.exe, launch.exe) shell.exe --> device.exe --> gwes.exe --> (explorer.exe, ovl_manager.exe) |-------------------->-------------| |------> services.exe notifyrep.exe
Cateva concluzii: a) niciunul dintre programele din lista nu va porni daca lipseste shell.exe. b) lipsa oricarui program de care depind alte programe va bloca executarea acestora(de pilda gwes si device) c) pentru exemplul de mai sus, stergerea cheii Launch99 si Depends99 ar fi dus la ramanerea in explorer, fara a mai activa shellul user.
Sfaturi, observatii: 1) Daca nu stii exact ce faci, nu interveni in HKLM/init ci foloseste metode alternative. Daca totusi nu exista alta cale pentru deblocare, intreaba inainte sa faci orice modificare. 2) Nu exista metode universal valabile pentru deblocare via HKLM/init ci solutia trebuie adaptata in functie de aparat. 3) Nu editata (modifica) niciodata acele programe de care depind altele. Pot fi editate cu riscuri semnificativ mai mici capetele schemei de mai sus. 4) Chiar daca de programul editat/modificat nu mai depinde nimeni, nu lasa niciodata intrarea "fara acoperire", deoarece este posibil sa blochezi aparatul. Asta inseamna ca intrarea Initxx nu trebuie sa puncteze catre un executabil inexistent sau volatil. De pilda, definesti un executabil existent la un moment dat in directorul \windows ; lucrurile merg bine pana la primul hard reset, dupa care intrarea va puncta catre un executabil inexistent. Solutia este sa plasezi acel executabil pe discul flash si sa indici calea in Launchxx (de ex. \ResidentFlash\myprogram.exe). Atentie, da numele exact al discului tau flash asa cum il vezi prin activesync sau explorerul local!! Un typo aici poate fi fatal! 5) Daca tii neaparat sa lansezi din HKLM\init un anumit program, creaza o noua intrare, de ex. Launch777, fie fara Depend , fie cu Depend777 si valoarea de la numarul cheii services transformat in hexa (in exemplul de mai sus 3C 00), cu respectarea celor spuse la pct. anterior (4)
Modificat de ablbd (acum 15 ani)
_______________________________________ E400, Wayteq 770BT, Wayteq 920BT
|
|