Wo speichert Windows die Einstellungen wenn nicht in Registry?

08/10/2008 - 08:13 von leslie eldrige | Report spam
Hallo Zusammen,

Ich weiss, dass dieses Thema nicht unbedingt hier her passt, aber die NET
Entwickler kennen sich am besten mit allen Themen. Ausserdem ist leider
Registry Forum nicht gerade gut besucht.

Also ich muss die Registry von PCs automatisch anpassen, um einige
Windowseinstellungen bei allen PCs gleich zu stellen. Das erste Beispiel war
die Einstellung für ein KLASSISCHES START MENU. Dies geht einfach über den
Registry Wert:
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoSimpleStartMenu = 1
oder in der Policy:
User Configuration -> Administrative Templates -> Start Menu and Taskbar ->
"Force classic Start Menu" = enabled

Soweit so gut, mit einem Programm kann ich alle benötigte Einstellungen
(inklusive CLASSIC START MENU) über registry einstellen wobei ich auch den
aktuellen Wert anzeige damit der User sieht was gerade eingestellt ist. .

ABER als ich beim ersten PC die Klassisches Start Menu Einstellung gesehen
habe, gab mein Programm an, dass der Parameter NoSimpleStartMenu in der
registry NICHT existiert! Ich überprüfte das und muste wirklich feststellen,
dass es diesen Parameter in der ganzen Registry nicht gibt! Ich ging auch zur
Policy Group Console und schaute dort und war wieder überrascht. Force
classic Start Menu stand auf NOT CONFIGURED!

Ich Änderte also die Einstellung manuell über rechte Maustaste auf der
Taskbar => EINGENSCHAFTEN => STARTMENU => dann zu STARTMENU in der Hoffnung,
dass Windows den fehlenden Registryeintrag erstellen würde. Klassisches
Startmenu war weg, was auch zu erwarten war. Wieder prüfte ich Registry und
Goup Policy, aber nichts wurde geàndert! Dann ànderte ich alles wieder auf
CLASSIC START MENU und es kam wie erwartet wieder das klassisches Start Menu.
Was aber dabei sehr wunderlich ist, ist, dass Windows diese manuelle
Anpassungen wirklich niergendwo in der Registry abspeichert (auch nicht in
der Policy)!?
Noch etwas ist sehr interessant. Wenn ich die Änderung dann aber trotzdem in
der Registry mache (indem ich den NoSimpleStartMenu erstelle und auf 1
setze), dann brauche ich einen neuen Start, damit ein klassisches Start Menu
erscheint. Wenn ich diese Einstellung manuell über Eingeschaften àndere, dann
ist sie sofort sichtbar!

Dies ist auch mit meisten anderen Einstellungen (die ich setzen muss) der
Fall. Also man findet sie niergendwo in der Registry, aber Windows verhàlt
sich, als ob diese Einstellungen in der Registry gesetzt wàren!

Ich frage mich nun, wo speichert Windows diese Einstellungen wenn nicht in
der Registry? Gibt es eine Windows INI Datei? Und falls Windows selber die
Einstellungen ausserhalb Registry abspeichert, wie ist dann die Hierarchie,
bzw. was hat den Vorrang, die gespeicherte Einstellung ausserhalb Registry
(die Windows setzt wenn man die Windows standard Optionen zum setzten der
Einstellungen verwendet) oder die Eintràge in der Registry? Und kann man die
Einstellungen auf 'Windows-Weise' (also nicht in der Registry) àndern, so
dass kein Neustart nötig ist?

Ich hoffe man versteht meine Frage und noch besser, man kann es
nachvollziehen. Für eine Aufklàrung wàre ich dan nsehr dankbar.

Grüsse
les
 

Lesen sie die antworten

#1 Gerold Mittelstädt
09/10/2008 - 15:19 | Warnen spam
Hallo Leslie,

leslie eldrige schrieb:
Ich weiss, dass dieses Thema nicht unbedingt hier her passt, aber die NET
Entwickler kennen sich am besten mit allen Themen. Ausserdem ist leider
Registry Forum nicht gerade gut besucht.



Thematisch betrifft das eher unmanaged C++

Also ich muss die Registry von PCs automatisch anpassen, um einige
Windowseinstellungen bei allen PCs gleich zu stellen. Das erste Beispiel war
die Einstellung für ein KLASSISCHES START MENU. Dies geht einfach über den
Registry Wert:
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoSimpleStartMenu = 1
oder in der Policy:
User Configuration -> Administrative Templates -> Start Menu and Taskbar ->
"Force classic Start Menu" = enabled



Das ist AFAIK "nur" die Zwangsgruppeneinstellung, die dann vom User ohne
entsprechende Rechte nicht mehr geàndert werden kann.

Soweit so gut, mit einem Programm kann ich alle benötigte Einstellungen
(inklusive CLASSIC START MENU) über registry einstellen wobei ich auch den
aktuellen Wert anzeige damit der User sieht was gerade eingestellt ist. .

ABER als ich beim ersten PC die Klassisches Start Menu Einstellung gesehen
habe, gab mein Programm an, dass der Parameter NoSimpleStartMenu in der
registry NICHT existiert! Ich überprüfte das und muste wirklich feststellen,
dass es diesen Parameter in der ganzen Registry nicht gibt! Ich ging auch zur
Policy Group Console und schaute dort und war wieder überrascht. Force
classic Start Menu stand auf NOT CONFIGURED!



Sollte die Standardeinstellung sein. Implizit dann False

Ich Änderte also die Einstellung manuell über rechte Maustaste auf der
Taskbar => EINGENSCHAFTEN => STARTMENU => dann zu STARTMENU in der Hoffnung,
dass Windows den fehlenden Registryeintrag erstellen würde. Klassisches
Startmenu war weg, was auch zu erwarten war. Wieder prüfte ich Registry und
Goup Policy, aber nichts wurde geàndert! Dann ànderte ich alles wieder auf
CLASSIC START MENU und es kam wie erwartet wieder das klassisches Start Menu.
Was aber dabei sehr wunderlich ist, ist, dass Windows diese manuelle
Anpassungen wirklich niergendwo in der Registry abspeichert (auch nicht in
der Policy)!?



Doch, sehrwohl. Das passiert alles, wenn Du auf Übernehmen klickst und
"Startmenü" ausgewàhlt ist:
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced Access: 0x3
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarSizeMove 0x0
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced Access: 0x3
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarGlomming 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellState 24 00 00 00 17 28 01 00 ...
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced Access: 0x2000000
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowCompColor 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DontPrettyPath 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowInfoTip 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideIcons 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\MapNetDrvBtn 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\WebView 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Filter 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\SuperHidden 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\SeparateProcess 0x0
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\Mode 0x1
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ScrollPos1280x1024(2).x 0x0
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ScrollPos1280x1024(2).y 0x0
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\Sort 0x0
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\SortDir 0x1
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\Col 0x0
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ColInfo 00 00 00 00 00 00 00 00 ...
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ItemPos1280x1024(2) 00 00 00 00 00 00 00 00 ...
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\0000000000010d4d Access: 0x1
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\0000000000010d4d Access: 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Cached\{2559A1F4-21D7-11D4-BDAF-00C04F60B9F0} {000214E6-0000-0000-C000-000000000046} 0x401 00 00 00 00 37 00 39 00 ...
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Cached\{2559A1F5-21D7-11D4-BDAF-00C04F60B9F0} {000214E6-0000-0000-C000-000000000046} 0x401 00 00 00 00 37 00 39 00 ...



Und das, wenn "Klassisches Startmenü" ausgewàhlt ist:
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced Access: 0x3
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarSizeMove 0x0
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced Access: 0x3
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarGlomming 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellState 24 00 00 00 17 28 01 00 ...
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced Access: 0x2000000
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowCompColor 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DontPrettyPath 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowInfoTip 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideIcons 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\MapNetDrvBtn 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\WebView 0x1
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Filter 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\SuperHidden 0x0
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\SeparateProcess 0x0
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\Mode 0x1
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ScrollPos1280x1024(2).x 0x0
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ScrollPos1280x1024(2).y 0x0
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\Sort 0x0
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\SortDir 0x1
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\Col 0x0
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ColInfo 00 00 00 00 00 00 00 00 ...
SetValue HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ItemPos1280x1024(2) 00 00 00 00 00 00 00 00 ...
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage Access: 0x2001F
SetValue HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage\ProgramsCache 09 00 00 00 0B 00 02 00 ...
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu Access: 0x2001F
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\0000000000010d4d Access: 0x1
CreateKey HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\0000000000010d4d Access: 0x1



Làsst sich mit dem RegMon[1] schön verfolgen.

Was davon jetzt letztich fürs Startmenü relevant ist, ist wieder eine
andere Sache, da das das komplette Eisntellungsspektrum des Dialogs ist.
Also schaut man sich an, welche Werte sich eigentlich tatsàchlich
geàndert haben, darunter auch das 32. Bit in

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellState



wo ja auch die ActiveDesktop-Einstellungen drin sind. Würde also
schonmal von der Baustelle her grob passen.

Der Registrierungseintrag hat die Struktur SHELLSTATE[2], die u.a. den
Eintrag fStartPanelOn (Windows XP only: TRUE to use the Windows XP-style
Start menu, FALSE to use the classic Start menu.) hat.
Bingo! 0x00 ist also klassisch und 0x02 ist XP.
Nur würde ich es tunlichst lassen, da so einfach am Eintrag rumzuspielen
und zu versuchen, die Bits manuell zu setzen.
Dafür gibt es und SHGetSetSettings[3] in Verbindung mit SSF_STARTPANELON
(0x00200000, Windows XP and later. The fStartPanelOn member is being
requested).

Noch etwas ist sehr interessant. Wenn ich die Änderung dann aber trotzdem in
der Registry mache (indem ich den NoSimpleStartMenu erstelle und auf 1
setze), dann brauche ich einen neuen Start, damit ein klassisches Start Menu
erscheint. Wenn ich diese Einstellung manuell über Eingeschaften àndere, dann
ist sie sofort sichtbar!



Die Einstellungen werden normal beim Start/bei der Anmeldung einmal
geladen, und dann im dynamischen Cache gehalten. Der Explorer bekommt
die Änderung also erstmal überhaupt nicht mit.
Dass das beim Dialog sofort übernommen wird, hat also einen anderen
Grund: Dem Explorer (bzw. den betreffenden Fenstern) wird mitgeteilt
"Hey Du, an Deinen Einstellungen hat sich was geàndert. Schau mal in die
Registry und lad die neuen!" :)

Die Shell kapselt diesen Aufruf speziell für das Startmenü
COM-Zugànglich in RefreshMenu[4].
Kannst Du aber auch manuell machen, indem Du über SendMessage die
Nachricht WM_SETTINGSCHANGE mit wParam=0, lParam="ShellState" der
Taskbar (Shell_TrayWnd) schickst.

Dies ist auch mit meisten anderen Einstellungen (die ich setzen muss) der
Fall. Also man findet sie niergendwo in der Registry, aber Windows verhàlt
sich, als ob diese Einstellungen in der Registry gesetzt wàren!



Die Einstellungen sind schon da, nur ggf. nicht offensichtlich, sondern
z.B. in diversen Binàrstrukturen "versteckt".
Und wenn man an denen rumspielt, ohne genau zu wissen, was man tut, kann
man da auch sehr schnell sehr viel mit kaputt machen. Glaub mir ;)
Am Besten Du làsst sowas dann erstmal auf ein virutelles System im
Sandboxmodus los. Beim VirtualPC heißt das Ding "Rückgàngig-Datentràger"

Ich frage mich nun, wo speichert Windows diese Einstellungen wenn nicht in
der Registry? Gibt es eine Windows INI Datei? Und falls Windows selber die
Einstellungen ausserhalb Registry abspeichert, wie ist dann die Hierarchie,
bzw. was hat den Vorrang, die gespeicherte Einstellung ausserhalb Registry
(die Windows setzt wenn man die Windows standard Optionen zum setzten der
Einstellungen verwendet) oder die Eintràge in der Registry? Und kann man die
Einstellungen auf 'Windows-Weise' (also nicht in der Registry) àndern, so
dass kein Neustart nötig ist?



Normal hat Windows die Betriebseinstellungen alle in der
Registrierungsdatenbank.
Sicher gibt es ein paar Relikte aus 3.1, wo das noch anders aussieht,
aber das sollte hier nicht relevant sein.

Ich hoffe man versteht meine Frage und noch besser, man kann es
nachvollziehen. Für eine Aufklàrung wàre ich dan nsehr dankbar.



[1] http://technet.microsoft.com/de-de/...96652.aspx
[2] http://msdn.microsoft.com/en-us/library/bb759788(VS.85).aspx
[3] http://msdn.microsoft.com/en-us/library/bb762200(VS.85).aspx
[4] http://msdn.microsoft.com/en-us/library/bb774090(VS.85).aspx
Viele Grüße!

Ähnliche fragen