Avatar billede azerty Juniormester
21. februar 2010 - 17:18 Der er 6 kommentarer og
1 løsning

Udskiftning af kernefiler

Dette er et total-nørdet spørgsmål. Jeg kan godt forstå, hvis du - kære læser - ikke orker at læse det :-)

Anyway, here goes:

I en frisk Windows 2000-installation ligger flg. fire kernefiler...

ntkrnlmp.exe
ntkrnlpa.exe
ntkrpamp.exe
ntoskrnl.exe

i hhv.:

%SystemRoot%\Driver Cache\i386
%SystemRoot\System32\dllcache:

To af disse kernefiler er til stede i %SystemRoot%\System32:

ntkrnlpa.exe
ntoskrnl.exe

Ingen af filerne er system, skjulte eller skrivebeskyttede, og i registreringsdatabasen har jeg tilføjet værdien:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

0xffffff9d (4294967197)

... som efter sigende skulle slå Windows' automatiske genskabelse af systemfiler fra.


Jeg har for sjov prøvet at ombytte disse kernefiler med fire lettere modificerede kopier fra CMD med et lille trick. De modificerede kernefiler hedder nt*.ex_:

----------

@echo off

copy /y ntkrnlmp.ex_ "%SystemRoot%\Driver Cache\i386"
copy /y ntkrnlpa.ex_ "%SystemRoot%\Driver Cache\i386"
copy /y ntkrpamp.ex_ "%SystemRoot%\Driver Cache\i386"
copy /y ntoskrnl.ex_ "%SystemRoot%\Driver Cache\i386"

copy /y ntkrnlmp.ex_ %SystemRoot%\System32\dllcache
copy /y ntkrnlpa.ex_ %SystemRoot%\System32\dllcache
copy /y ntkrpamp.ex_ %SystemRoot%\System32\dllcache
copy /y ntoskrnl.ex_ %SystemRoot%\System32\dllcache

copy /y ntkrnlpa.ex_ %SystemRoot%\System32
copy /y ntoskrnl.ex_ %SystemRoot%\System32

rem original

ren "%SystemRoot%\Driver Cache\i386\ntkrnlmp.exe" ntkrnlmp.exe_old
ren "%SystemRoot%\Driver Cache\i386\ntkrnlpa.exe" ntkrnlpa.exe_old
ren "%SystemRoot%\Driver Cache\i386\ntkrpamp.exe" ntkrpamp.exe_old
ren "%SystemRoot%\Driver Cache\i386\ntoskrnl.exe" ntoskrnl.exe_old

ren System32\dllcache\ntkrnlmp.exe ntkrnlmp.exe_old
ren System32\dllcache\ntkrnlpa.exe ntkrnlpa.exe_old
ren System32\dllcache\ntkrpamp.exe ntkrpamp.exe_old
ren System32\dllcache\ntoskrnl.exe ntoskrnl.exe_old

ren System32\ntkrnlpa.exe ntkrnlpa.exe_old
ren System32\ntoskrnl.exe ntoskrnl.exe_old

rem newcopy

ren "%SystemRoot%\Driver Cache\i386\ntkrnlmp.ex_" ntkrnlmp.exe
ren "%SystemRoot%\Driver Cache\i386\ntkrnlpa.ex_" ntkrnlpa.exe
ren "%SystemRoot%\Driver Cache\i386\ntkrpamp.ex_" ntkrpamp.exe
ren "%SystemRoot%\Driver Cache\i386\ntoskrnl.ex_" ntoskrnl.exe

ren System32\dllcache\ntkrnlmp.ex_ ntkrnlmp.exe
ren System32\dllcache\ntkrnlpa.ex_ ntkrnlpa.exe
ren System32\dllcache\ntkrpamp.ex_ ntkrpamp.exe
ren System32\dllcache\ntoskrnl.ex_ ntoskrnl.exe

ren System32\ntkrnlpa.ex_ ntkrnlpa.exe
ren System32\ntoskrnl.ex_ ntoskrnl.exe

----------

DET VIRKEDE IKKE - desværre :-(

Der kommer ingen fejlmeddelelser undervejs i batchfilen, men efter genstart vil Windows ikke indlæses - opstarten går i stå efter den hurtige hvide bjælke i bunden af skærmen ("Windows 2000 starter"). Windows vil åbenbart ikke kendes ved de nye kernefiler.


Herefter bootede jeg computeren på en USB stick med MS-DOS og Winternals "NTFS for DOS" inkluderet + de modificerede kernefiler. Dermed fik jeg read/write-adgang til NTFS-partitionen og kunne manuelt udføre operationerne skitseret i ovenstående batchfil.

DET VIRKEDE HELLER IKKE - øv :-(

Samme fejl som før.

--

Nu kommer spørgsmålet:

Hvordan kan Microsoft lave en KB-opdatering, som uden videre opdaterer kernefilerne - endda uden at brugeren skal genstarte computeren? Hvad er det, som sådan en opdatering gør mere end at bytte kernefilerne ud. Er det en registreringsbase-setting - eller er det noget helt andet.

Jeg er bare nysgerrig...

På forhånd tak!
Avatar billede azerty Juniormester
22. februar 2010 - 19:56 #1
Nå, det var vist for tosset et spørgsmål..... holder det et par dage, inden jeg lukker.
Avatar billede azerty Juniormester
23. februar 2010 - 22:58 #2
Fejl i scriptet ovenfor - jeg glemte %SystemRoot% et par steder:

Nyt, korrigeret script:

@echo off

copy /y "ntkrnlmp.ex_" "%SystemRoot%\Driver Cache\i386"
copy /y "ntkrnlpa.ex_" "%SystemRoot%\Driver Cache\i386"
copy /y "ntkrpamp.ex_" "%SystemRoot%\Driver Cache\i386"
copy /y "ntoskrnl.ex_" "%SystemRoot%\Driver Cache\i386"

copy /y "ntkrnlmp.ex_" "%SystemRoot%\System32\dllcache"
copy /y "ntkrnlpa.ex_" "%SystemRoot%\System32\dllcache"
copy /y "ntkrpamp.ex_" "%SystemRoot%\System32\dllcache"
copy /y "ntoskrnl.ex_" "%SystemRoot%\System32\dllcache"

copy /y "ntkrnlpa.ex_" "%SystemRoot%\System32"
copy /y "ntoskrnl.ex_" "%SystemRoot%\System32"

rem original

ren "%SystemRoot%\Driver Cache\i386\ntkrnlmp.exe" "ntkrnlmp.exe_old"
ren "%SystemRoot%\Driver Cache\i386\ntkrnlpa.exe" "ntkrnlpa.exe_old"
ren "%SystemRoot%\Driver Cache\i386\ntkrpamp.exe" "ntkrpamp.exe_old"
ren "%SystemRoot%\Driver Cache\i386\ntoskrnl.exe" "ntoskrnl.exe_old"

ren "%SystemRoot%\System32\dllcache\ntkrnlmp.exe" "ntkrnlmp.exe_old"
ren "%SystemRoot%\System32\dllcache\ntkrnlpa.exe" "ntkrnlpa.exe_old"
ren "%SystemRoot%\System32\dllcache\ntkrpamp.exe" "ntkrpamp.exe_old"
ren "%SystemRoot%\System32\dllcache\ntoskrnl.exe" "ntoskrnl.exe_old"

ren "%SystemRoot%\System32\ntkrnlpa.exe" "ntkrnlpa.exe_old"
ren "%SystemRoot%\System32\ntoskrnl.exe" "ntoskrnl.exe_old"

rem newcopy

ren "%SystemRoot%\Driver Cache\i386\ntkrnlmp.ex_" "ntkrnlmp.exe"
ren "%SystemRoot%\Driver Cache\i386\ntkrnlpa.ex_" "ntkrnlpa.exe"
ren "%SystemRoot%\Driver Cache\i386\ntkrpamp.ex_" "ntkrpamp.exe"
ren "%SystemRoot%\Driver Cache\i386\ntoskrnl.ex_" "ntoskrnl.exe"

ren "%SystemRoot%\System32\dllcache\ntkrnlmp.ex_" "ntkrnlmp.exe"
ren "%SystemRoot%\System32\dllcache\ntkrnlpa.ex_" "ntkrnlpa.exe"
ren "%SystemRoot%\System32\dllcache\ntkrpamp.ex_" "ntkrpamp.exe"
ren "%SystemRoot%\System32\dllcache\ntoskrnl.ex_" "ntoskrnl.exe"

ren "%SystemRoot%\System32\ntkrnlpa.ex_" "ntkrnlpa.exe"
ren "%SystemRoot%\System32\ntoskrnl.ex_" "ntoskrnl.exe"

---
men desværre - det duer ikke alligevel...
24. februar 2010 - 06:39 #3
Men gennemføres ovenstående uden brok ? Eller hyr ?
Sæt evt. en
PAUSE
i slutningen...
Avatar billede azerty Juniormester
24. februar 2010 - 07:05 #4
Nej, det gennemføres ikke - heller ikke i fejlsikret tilstand.

Metoden med at omdøbe den eksisterende systemfil til ".*_old (i stedet for at slette den eller overskrive den), virker på andre vigtige systemfiler, fx. msgina.dll.

Jeg læste om det på nettet, men kan desværre ikke finde siden igen.

Fidusen skulle være at starte i dllcache for at sikre, at Windows ikke straks overskriver med en original kopi fra netop dllcache.

Men det virker altså ikke med ntoskrnl.exe og ntkrnlpa.exe.

Jeg bruger også "pause" og "echo on" for at se processen. Der kommer ingen fejlmeddelelser, men som nævnt: Efter genstart vil Windows ikke indlæses.
Avatar billede Vandreren Novice
28. februar 2010 - 12:47 #5
Virker ombytningen heller ikke, hvis du bruger Replacer (kræver genstart)?
http://www3.telus.net/_/replacer/

Hvis det heller ikke virker med Replacer, så ligger problemet måske snarere i de modificerede filer end i ombytningsproceduren.
Avatar billede azerty Juniormester
06. marts 2010 - 01:29 #6
Jeg har prøvet Replacer.

Måske er det bare mig, der bruger programmet forkert. Men når jeg trækker de nye filer ind i cmd, får jeg at vide, at de "ikke er win-32" eller noget i den retning.

De modificerede filer virker fint, hvis jeg på installationscdrommen bytter med ud med de originale (efter slipstreaming af sp4 og alle nye opdateringer).

Man skal bare huske at omdøbe dem til NTOSKRNL.EX_ osv.
Avatar billede azerty Juniormester
10. juni 2010 - 23:05 #7
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester