Forum Romania Inedit
Romania Inedit - Resursa ta de Fun
Lista Forumurilor Pe Tematici
Forum Romania Inedit | Reguli | Inregistrare | Login

POZE FORUM ROMANIA INEDIT

Nu sunteti logat.
Nou pe simpatie:
Lolalola
Femeie
22 ani
Cluj
cauta Barbat
26 - 80 ani
Forum Romania Inedit / Mobile/ PDA / GPS Tech Support / HOW TO - HKLM\init Moderat de Crizzu, gabiandreicristian
Autor
Mesaj Pagini: 1
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

pus acum 15 ani
   
testerics
VETERAN

Inregistrat: acum 15 ani
Din cate stiu, pentru WinCE 4.2 dupa hard-reset se pierd setarile din registri, deci no problem!
Doar la WinCE 5.0 se pastreaza registrii chiar si dupa hard-reset, asa ca aici poate fi periculos 
Oricum, informatii utile, multam fain.


_______________________________________
Nu am nici un talent anume... sunt doar extraordinar de curios!
- Albert Einstein -

pus acum 15 ani
   
ablbd
Membru Senior

Inregistrat: acum 15 ani
Nici macar la .net 4.2 nu poti generaliza, deoarece cunosc aparate la care a fost adoptat sistemul registrilor persistenti pe disc flash, asa ca nu miza pe asta decat daca esti foarte sigur ca sistemul va repune registrii din rom dupa hard reset.
Am intalnit o situatie ciudata la Wayteq, care nu are buton on/off ci doar buton standby si unul mic de reset. Daca editez o cheie si resetez aparatul din butonul dedicat, revine la starea anteroara editarii. Daca editez o cheie si opresc aparatul fie cu programul propriu de shut down fie cu cel din miopocket, modificarea ramane definitiva dupa repornire, indiferent de cum il inchid dupa asta. Cazuri si cazuri...


_______________________________________
E400, Wayteq 770BT, Wayteq 920BT

pus acum 15 ani
   
Pagini: 1  

Mergi la