Fehler 5 - Erstellen von Registry-Einträgen in HKCU
Fehler 5 - Erstellen von Registry-Einträgen in HKCU
Hallo!
Folgende Registry-Einträge müssen in HKCU erstellt werden:
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32",,0x00000010
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar",,0x00000010
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar","place0",0x00010001,0
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar","place1",0x00010001,17
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar","place2",0x00010001,5
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar","place3",0x00000000,"Q:\Daten"
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar","place4",0x00000000,"%Userprofile%\Desktop\d3Archiv"
Genau an der Stelle bekomme ich den Fehler 3, dass er den Key nicht anlegen kann.
Mit welchen Rechten wird denn der Benutzerteil, in dem diese Einträge ja gemacht werden, ausgeführt, wenn ein normaler Domänenbenutzer angemeldet ist. Bis dato hatte ich gedacht, dass diese Benutzerteile auch über den Benutzer des Empirum Agenten installiert werden, was ja aufgrund dieser Fehlermeldung nicht möglich ist.
Wie ist es trotzdem möglich, diese Registry-Einträge zu erzeugen? Gibt es Möglichkeiten, die Registry-Einträge für normale User freizuschalten?
Das Freischalten der Registry-Einträge müsste dann ja im Maschinenteil erfolgen, wobei hier natürlich nicht jeder einzelne User im HKCU verändert werden kann. Ich hoffe, hierzu hat jemand noch eine Idee.
Mit freundlichen Grüßen
Andrè Döking
Ärztekammer Westfalen-Lippe
Folgende Registry-Einträge müssen in HKCU erstellt werden:
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32",,0x00000010
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar",,0x00000010
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar","place0",0x00010001,0
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar","place1",0x00010001,17
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar","place2",0x00010001,5
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar","place3",0x00000000,"Q:\Daten"
HKCU,"Software\Microsoft\Windows\CurrentVersion\policies\comdlg32\Placesbar","place4",0x00000000,"%Userprofile%\Desktop\d3Archiv"
Genau an der Stelle bekomme ich den Fehler 3, dass er den Key nicht anlegen kann.
Mit welchen Rechten wird denn der Benutzerteil, in dem diese Einträge ja gemacht werden, ausgeführt, wenn ein normaler Domänenbenutzer angemeldet ist. Bis dato hatte ich gedacht, dass diese Benutzerteile auch über den Benutzer des Empirum Agenten installiert werden, was ja aufgrund dieser Fehlermeldung nicht möglich ist.
Wie ist es trotzdem möglich, diese Registry-Einträge zu erzeugen? Gibt es Möglichkeiten, die Registry-Einträge für normale User freizuschalten?
Das Freischalten der Registry-Einträge müsste dann ja im Maschinenteil erfolgen, wobei hier natürlich nicht jeder einzelne User im HKCU verändert werden kann. Ich hoffe, hierzu hat jemand noch eine Idee.
Mit freundlichen Grüßen
Andrè Döking
Ärztekammer Westfalen-Lippe
Du kannst explizit Rechte auf Keys geben in [Security:Product]
Bsp.:
Ka, ob es das ist, was du meinst.
Bsp.:
Code: Select all
RegDacl.Add &--40;HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\MSLicensing", "%$Everyone%", SET, ALL, SUB_CONTAINERS_AND_OBJECTS_INHERIT&--41;
-
HeikoLeupolz
- Posts: 128
- Joined: 14. Dec 2004, 13:37
- Location: Pfronten
- Contact:
Hallo,
der Benutzerteil wird mit dem angemeldeten User ausgeführt, sprich er hat u.U. keine Rechte. Für die RegKeys die erstellt werden sollen, werden aber genau diese Rechte benötigt (per Design von MS)
Mir fällt zu dem Problem nur ein, dem User temporär Rechte zu geben. Sprich im ersten Teil des Pakets den User zu den lokalen Admins aufnehmen, dann die Registry Keys erstellen, und am Ende des Pakets die lokalen Adminrechte wieder nehmen. Ist aber nicht sonderlich elegant
der Benutzerteil wird mit dem angemeldeten User ausgeführt, sprich er hat u.U. keine Rechte. Für die RegKeys die erstellt werden sollen, werden aber genau diese Rechte benötigt (per Design von MS)
Mir fällt zu dem Problem nur ein, dem User temporär Rechte zu geben. Sprich im ersten Teil des Pakets den User zu den lokalen Admins aufnehmen, dann die Registry Keys erstellen, und am Ende des Pakets die lokalen Adminrechte wieder nehmen. Ist aber nicht sonderlich elegant
Viele Grüße
Heiko Leupolz
Heiko Leupolz
-
HeikoLeupolz
- Posts: 128
- Joined: 14. Dec 2004, 13:37
- Location: Pfronten
- Contact:
-
Walter_Schulz
- Posts: 876
- Joined: 17. Dec 2004, 12:29
- Contact:
Ausserdem rennt man mit RUNAS gegen die Mauer, weil die HKCU des angemeldeten Benutzers nicht identisch ist mit der HKCU des Benutzers, bei dem die Aenderungen durchgefuehrt werden soll, sondern nur ueber HKU\<SID-des-Benutzers> zu erreichen ist.HeikoLeupolz wrote:ich würde kein Pwd in ein AutoIt Script nehmen, auch wenn ne EXE draus gemacht wird. Bei AutoIt ist ein Tool dabei um aus der EXE wieder ein plaines Script zu machen
Ist ja nicht das erste Mal, dass wir diese Diskussion fuehren, oder?
Okay, ich gebe es zu: Ich bin schuldig, weil ich die versprochenen Batches zur Aenderung aller existierenden User-Profiles (im SETUPSVC-Kontext) noch nicht geliefert habe. Ich versuche es heute abend zuhause ...
Ciao!
Walter Schulz
Re: Fehler 5
Hallo!
Hier nochmal die Abfolge, die bei uns funktionieren soll:
Wir haben hier ein Paket "Einstellungen für Windows XP" mit vers. Inhalten wie Dateien, aber auch Registry-Einträge.
Die Registry-Einträge für den aktuellen Benutzer (HKCU) werden auch erfolgreich im Benutzerteil eingetragen. Bis wir heute die im 1. Posting genannten Reg-Einträge unter HKCU\Software\Microsoft\Windows\CurrentVersion\Policies machen wollten, bei denen der Fehler 5 auftrat, was wohl meint, Zugriff verweigert.
Da der Benutzerteil ja, wie Ihr erwähnt habt, immer im Sicherheitskontext des aktuellen Benutzers ausgeführt wird (ist ja auch irgendwie logisch
) , habe ich nochmal händisch versucht, diese Keys anzulegen, was ebenso nicht möglich war.
Folgende Lösungen sind denkbar:
1. Die 1. theoretische Lösung wäre, die Benutzerrechte für diesen Key für jeden User in HKEY_USERS dementsprechend zu setzen, dass normale User auch Schreibrechte hierin haben. Dies würde dann im Maschinenteil des Paketes stehen, und wie von Hr. Schulz vorgeschlagen, automatisiert den RegDacl - Befehl für jeden User unter HKEY_Users auszuführen. (wäre optimal)
2. Den aktuellen User temporär zu den Admins hinzufügen, Rechte setzen, und dann wieder aus der Gruppe Admins herausnehmen, müsste ja auch im Benutzerteil ablaufen, damit der Userteil bei jedem Anwender funktioniert. Hier hat man natürlich wieder das Problem, dass man wieder im Sicherheitskontext des Anwenders arbeitet und dieser sich natürlich nicht selber zu den Admins hinzufügen kann. Es wäre natürlich mit runas möglich, nur das PW im Klartext ist nicht so mein Ding.
Ich denke, die optimale Lösung für dieses von MS geschaffene Problem wäre das Batch von Hr. Schulz. Um dann nicht ein neues Problem mit Usern zu bekommen, die sich zu diesem Zeitpunkt noch nie angemeldet haben, wäre es ja möglich, die Rechte dann gleich für den DefUser zu setzen.
Mit freundlichen Grüßen
Andrè Döking
Ärztekammer Westfalen-Lippe
Hier nochmal die Abfolge, die bei uns funktionieren soll:
Wir haben hier ein Paket "Einstellungen für Windows XP" mit vers. Inhalten wie Dateien, aber auch Registry-Einträge.
Die Registry-Einträge für den aktuellen Benutzer (HKCU) werden auch erfolgreich im Benutzerteil eingetragen. Bis wir heute die im 1. Posting genannten Reg-Einträge unter HKCU\Software\Microsoft\Windows\CurrentVersion\Policies machen wollten, bei denen der Fehler 5 auftrat, was wohl meint, Zugriff verweigert.
Da der Benutzerteil ja, wie Ihr erwähnt habt, immer im Sicherheitskontext des aktuellen Benutzers ausgeführt wird (ist ja auch irgendwie logisch
Folgende Lösungen sind denkbar:
1. Die 1. theoretische Lösung wäre, die Benutzerrechte für diesen Key für jeden User in HKEY_USERS dementsprechend zu setzen, dass normale User auch Schreibrechte hierin haben. Dies würde dann im Maschinenteil des Paketes stehen, und wie von Hr. Schulz vorgeschlagen, automatisiert den RegDacl - Befehl für jeden User unter HKEY_Users auszuführen. (wäre optimal)
2. Den aktuellen User temporär zu den Admins hinzufügen, Rechte setzen, und dann wieder aus der Gruppe Admins herausnehmen, müsste ja auch im Benutzerteil ablaufen, damit der Userteil bei jedem Anwender funktioniert. Hier hat man natürlich wieder das Problem, dass man wieder im Sicherheitskontext des Anwenders arbeitet und dieser sich natürlich nicht selber zu den Admins hinzufügen kann. Es wäre natürlich mit runas möglich, nur das PW im Klartext ist nicht so mein Ding.
Ich denke, die optimale Lösung für dieses von MS geschaffene Problem wäre das Batch von Hr. Schulz. Um dann nicht ein neues Problem mit Usern zu bekommen, die sich zu diesem Zeitpunkt noch nie angemeldet haben, wäre es ja möglich, die Rechte dann gleich für den DefUser zu setzen.
Mit freundlichen Grüßen
Andrè Döking
Ärztekammer Westfalen-Lippe
re: Fehler5
Hallo!
Ich hab mich noch mal hingesetzt und ein VBScript Programm geschrieben, dass automatisch die Rechte für die bestehenden User für einen best. Registry-Key ändert. Es fängt auch die Situation ab, wenn ein normaler Anwender angemeldet ist und dieses Paket durch den Sicherheitskontext des Empirum Agenten installiert wird.
Folgendes Problem stellt sich noch, wo ich bis dato noch keinen Rat weiß:
- Wenn sich ein neuer User anmeldet, wird ja das Profil des Default User genommen
- Dieses Default User - Profil bearbeite ich am Ende des Skriptes, setze auch die entsprechenden Rechte und erzeuge die Reg-Einträge.
- Allerdings gibt es dabei das Problem, dass nachher nach Anmeldung eines neuen Users zwar die Reg-Einträge existieren, aber die Sicherheitsrichtlinien nicht gegriffen haben und nun nicht mehr zu sehen sind. Es ist hierbei allerdings der selbe Aufruf wie bei den schon existierenden Usern, wo das alles funktioniert. Vielleicht ist die Rechtevergabe auf den Default User in diesem Bereich von MS eingeschränkt.
Der Default-User wird am Ende erst bearbeitet, da es sonst zu diversen Problemen gekommen ist und dieses Profil innerhalb der Zählschleife nicht korrekt zu laden war.
'==========================================================================
'
' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0
'
' NAME: Rechte für Policies einstellen
'
' AUTHOR: Andrè Döking , Ärztekammer Westfalen-Lippe
' DATE : 14.02.2006
'
' COMMENT:
'
'==========================================================================
Dim WshShell, WshNetwork, FSO, Userpath, Skriptpath, temp, errorlevel, objReg, ValueArray
Userpath="C:\Dokumente und Einstellungen\"
Skriptpath="\\matrix42s\configurator$\Packages\AEKWL\Einstellungen\1.0\All"
Set WshShell=WScript.CreateObject("WScript.Shell")
Set WshNetwork=WScript.CreateObject("WScript.Network")
Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
Set Folder=FSO.GetFolder(Userpath).SubFolders
'normale User, die aktuell existieren, bearbeiten (User des Empirum Agenten wird ausgelassen
For Each item In Folder
temp = Mid(item,Len(Userpath)+1)
If temp<>"All Users" And temp<>"Default User" And temp<>"intelldms" And temp<>"NetworkService" And temp<>"LocalService" And temp<>"NetworkService.NT-AUTORITÄT" And temp<>"LocalService.NT-AUTORITÄT" Then
errorlevel=0 'Zurücksetzen auf Null
errorlevel=WshShell.Run("reg.exe load HKU\" & temp & " " & Chr(34) & item & "\ntuser.dat" & Chr(34),0,1)
If errorlevel=0 Then
WshShell.RegWrite "HKEY_USERS\" & temp & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\",""
WshShell.RegWrite "HKEY_USERS\" & temp & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar\",""
WshShell.Run Skriptpath & "\setacl.exe -on " & Chr(34) & "HKEY_USERS\" & temp & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar" & Chr(34) & " -ot reg -actn ace -ace " & Chr(34) & "n:Benutzer;p:full" & Chr(34),0,1
WshShell.Run "reg.exe unload HKU\" & temp,0,1
'betrifft angemeldeten User bei Ausführung über Sicherheitskontext des Empirum Agenten (aktueller User ist dann der User des Empirum Agenten in diesem Fall)
Else
'Laden der schon vorhandenen SID des Users unter HKEY_Users (trotz Ausführung des Empirum Agenten im anderen Sicherheitskontext taucht ja die SID des ursprünglich angemeldeten Users hier auf
Set objReg=GetObject("winmgmts:\\.\root\default:StdRegProv")
objReg.EnumKey &H80000003,"",ValueArray
For Each Value In ValueArray
If Left(Value,8)="S-1-5-21" And Right(Value,7)<>"Classes" And Right(Value,4)<>"1011" Then
WshShell.RegWrite "HKEY_USERS\" & value & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\",""
WshShell.RegWrite "HKEY_USERS\" & value & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar\",""
WshShell.Run Skriptpath & "\setacl.exe -on " & Chr(34) & "HKEY_USERS\" & value & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar" & Chr(34) & " -ot reg -actn ace -ace " & Chr(34) & "n:Benutzer;p:full" & Chr(34),0,1
Exit For
End If
Next
End If
End If
Next
'Default User bearbeiten (lässt sich nicht über oben angewandte Methode laden)
errorlevel=WshShell.Run("reg.exe load HKU\defuser " & Chr(34) & Userpath & "Default User\ntuser.dat" & Chr(34),0,1)
WshShell.RegWrite "HKEY_USERS\defuser\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\",""
WshShell.RegWrite "HKEY_USERS\defuser\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar\",""
WshShell.Run Skriptpath & "\setacl.exe -on " & Chr(34) & "HKEY_USERS\defuser\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar" & Chr(34) & " -ot reg -actn ace -ace " & Chr(34) & "n:Benutzer;p:full" & Chr(34),0,1
WshShell.Run "reg.exe unload HKU\defuser",0,1
Mit freundlichen Grüßen
Andrè Döking
Ärztekammer Westfalen-Lippe
Ich hab mich noch mal hingesetzt und ein VBScript Programm geschrieben, dass automatisch die Rechte für die bestehenden User für einen best. Registry-Key ändert. Es fängt auch die Situation ab, wenn ein normaler Anwender angemeldet ist und dieses Paket durch den Sicherheitskontext des Empirum Agenten installiert wird.
Folgendes Problem stellt sich noch, wo ich bis dato noch keinen Rat weiß:
- Wenn sich ein neuer User anmeldet, wird ja das Profil des Default User genommen
- Dieses Default User - Profil bearbeite ich am Ende des Skriptes, setze auch die entsprechenden Rechte und erzeuge die Reg-Einträge.
- Allerdings gibt es dabei das Problem, dass nachher nach Anmeldung eines neuen Users zwar die Reg-Einträge existieren, aber die Sicherheitsrichtlinien nicht gegriffen haben und nun nicht mehr zu sehen sind. Es ist hierbei allerdings der selbe Aufruf wie bei den schon existierenden Usern, wo das alles funktioniert. Vielleicht ist die Rechtevergabe auf den Default User in diesem Bereich von MS eingeschränkt.
Der Default-User wird am Ende erst bearbeitet, da es sonst zu diversen Problemen gekommen ist und dieses Profil innerhalb der Zählschleife nicht korrekt zu laden war.
'==========================================================================
'
' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0
'
' NAME: Rechte für Policies einstellen
'
' AUTHOR: Andrè Döking , Ärztekammer Westfalen-Lippe
' DATE : 14.02.2006
'
' COMMENT:
'
'==========================================================================
Dim WshShell, WshNetwork, FSO, Userpath, Skriptpath, temp, errorlevel, objReg, ValueArray
Userpath="C:\Dokumente und Einstellungen\"
Skriptpath="\\matrix42s\configurator$\Packages\AEKWL\Einstellungen\1.0\All"
Set WshShell=WScript.CreateObject("WScript.Shell")
Set WshNetwork=WScript.CreateObject("WScript.Network")
Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
Set Folder=FSO.GetFolder(Userpath).SubFolders
'normale User, die aktuell existieren, bearbeiten (User des Empirum Agenten wird ausgelassen
For Each item In Folder
temp = Mid(item,Len(Userpath)+1)
If temp<>"All Users" And temp<>"Default User" And temp<>"intelldms" And temp<>"NetworkService" And temp<>"LocalService" And temp<>"NetworkService.NT-AUTORITÄT" And temp<>"LocalService.NT-AUTORITÄT" Then
errorlevel=0 'Zurücksetzen auf Null
errorlevel=WshShell.Run("reg.exe load HKU\" & temp & " " & Chr(34) & item & "\ntuser.dat" & Chr(34),0,1)
If errorlevel=0 Then
WshShell.RegWrite "HKEY_USERS\" & temp & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\",""
WshShell.RegWrite "HKEY_USERS\" & temp & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar\",""
WshShell.Run Skriptpath & "\setacl.exe -on " & Chr(34) & "HKEY_USERS\" & temp & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar" & Chr(34) & " -ot reg -actn ace -ace " & Chr(34) & "n:Benutzer;p:full" & Chr(34),0,1
WshShell.Run "reg.exe unload HKU\" & temp,0,1
'betrifft angemeldeten User bei Ausführung über Sicherheitskontext des Empirum Agenten (aktueller User ist dann der User des Empirum Agenten in diesem Fall)
Else
'Laden der schon vorhandenen SID des Users unter HKEY_Users (trotz Ausführung des Empirum Agenten im anderen Sicherheitskontext taucht ja die SID des ursprünglich angemeldeten Users hier auf
Set objReg=GetObject("winmgmts:\\.\root\default:StdRegProv")
objReg.EnumKey &H80000003,"",ValueArray
For Each Value In ValueArray
If Left(Value,8)="S-1-5-21" And Right(Value,7)<>"Classes" And Right(Value,4)<>"1011" Then
WshShell.RegWrite "HKEY_USERS\" & value & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\",""
WshShell.RegWrite "HKEY_USERS\" & value & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar\",""
WshShell.Run Skriptpath & "\setacl.exe -on " & Chr(34) & "HKEY_USERS\" & value & "\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar" & Chr(34) & " -ot reg -actn ace -ace " & Chr(34) & "n:Benutzer;p:full" & Chr(34),0,1
Exit For
End If
Next
End If
End If
Next
'Default User bearbeiten (lässt sich nicht über oben angewandte Methode laden)
errorlevel=WshShell.Run("reg.exe load HKU\defuser " & Chr(34) & Userpath & "Default User\ntuser.dat" & Chr(34),0,1)
WshShell.RegWrite "HKEY_USERS\defuser\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\",""
WshShell.RegWrite "HKEY_USERS\defuser\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar\",""
WshShell.Run Skriptpath & "\setacl.exe -on " & Chr(34) & "HKEY_USERS\defuser\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\Placesbar" & Chr(34) & " -ot reg -actn ace -ace " & Chr(34) & "n:Benutzer;p:full" & Chr(34),0,1
WshShell.Run "reg.exe unload HKU\defuser",0,1
Mit freundlichen Grüßen
Andrè Döking
Ärztekammer Westfalen-Lippe
-
Walter_Schulz
- Posts: 876
- Joined: 17. Dec 2004, 12:29
- Contact:
Das leidige Problem mit den Rechten auf HKCU ist zu umgehen, in dem gar nicht auf HKCU sondern auf HKU geschrieben wird 
Hier ganz kurz die Vorgehensweise:
- mit $SID lässt sich die SID des Users ermitteln (Setup.inf-Befehl)
- auf HKU\<SID>\... werden die entsprechenden einträge gesetzt
- abmelden und neu anmelden und der Spaß ist unter HKCU gelandet.
Hier ganz kurz die Vorgehensweise:
- mit $SID lässt sich die SID des Users ermitteln (Setup.inf-Befehl)
- auf HKU\<SID>\... werden die entsprechenden einträge gesetzt
- abmelden und neu anmelden und der Spaß ist unter HKCU gelandet.
Jens Beimel
Matrix42 AG
info@matrix42.com
https://www.matrix42.com
Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 GmbH.
Matrix42 AG
info@matrix42.com
https://www.matrix42.com
Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 GmbH.
Who is online
Users browsing this forum: No registered users and 10 guests
