RegWrite Benutzerübergreifend in Domäne funzt nicht

  • Hallo,

    ich probier erst seit relativ kurzer Zeit mit den Möglichkeiten von AutoIT rum und bin bis jetzt schon begeistert und hab auch schon mehrere kleine Programme erfolgreich im Einsatz.

    Allerdings bin ich nun auf ein Problem gestoßen bei dem ich nicht mehr weiterkomme oder mir einfach das Verständnis fehlt, ich sollte vielleicht dazu anmerken das ich eher ein Netzwerknoob bin.

    So genug Vorspiel, jetzt zum eigentlichen Problem:

    Um gleich mal alles vorweg zu nehmen das Tool ist für Administratoren gedacht, und wird nicht für Hackerzwecker oder sonst irgendnen Krampf verwendet werden.

    Ich habe ein kleines Tool geschrieben welches mir die Benutzer SID`s in eine Combo Box ausliest,
    man wählt einen Benutzer aus drückt einen Button, in meinem Falle `Lock` oder `Unlock` und dann sollen per RegWrite verschiedene Einstellungen in der Registry geändert werden.

    Lokal kann ich das auch wunderschön machen und dat Dingen führt alles so aus wie ich das möchte.
    Als ich allerding einen Test in einer Domänenumgebung vorgenommen habe, funzt das nur wenn man als der Benutzer den man sperren möchte angemeldet ist, wähle ich einen anderen Benutzer passiert nix.

    BSP: Anmeldung als Gast -> Man startet die Unlock_lock.ex -> wählt Admin - LOCK -> Abmelden Gast -> Anmelden Admin -> nix ist passiert -> Abmelden Admin -> Anmeldnen Gast -> start Unlock_lock.exe -> wählt Gast - LOCK -> Ab- und Anmelden Gast -> Änderungen sind vorgenommen worden.

    Hier is erst mal der Code ich kann leider nicht alles hier reinstellen aber das elementare ist darin enthalten,
    sorry für die saumäßige Formatierung, hab aber noch grad die Kommentare entfernen müssen von daher schauts nicht so toll aus.

    Das System ist ein Windows xp sp2 System.

    Spoiler anzeigen

    #include <GUIConstants.au3>
    #include <Array.au3>
    #include <string.au3>
    #Include <process.au3>

    dim $arSid[15]

    dim $sid

    dim $splitter

    $i = 0

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20

    $colItems = ""

    $strComputer = "localhost"

    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")

    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    GUICreate("Lock & Unlock", 200, 90) ; will create a dialog box that when displayed is centered

    $buttonlock = GUICtrlCreateButton("Lock", 16, 50, 81, 25, 0)

    $buttonunlock = GUICtrlCreateButton("UnLock", 100, 50, 81, 25, 0)
    $combo = GUICtrlCreateCombo ("Bitte User wählen", 22,10,150) ; create first item
    If IsObj($colItems) then

    For $objItem In $colItems

    $sid = $objItem.SID

    GUICtrlsetdata(-1,$i & " = " & $objItem.Name) ; add other item snd set a new default

    $arSid[$i] = $sid

    $i = $i + 1

    GUISetState ()
    Next

    Else

    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
    Endif

    While 1

    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $buttonlock

    $splitter = GUICtrlRead($combo)
    ;MsgBox(16,"LockIT",$splitter)

    $arAus = StringSplit($splitter,' = ')
    ;MsgBox(16,"LockIT",$arAus[0] & $arAus[1] & $arAus[2] & $arAus[3])

    $i = $arAus[1]
    ;MsgBox(16,"LockIT",$i)

    RegWrite("HKEY_USERS\"&$arSid[$i]&"\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoRun", "Reg_DWord", "00000001")
    Case $buttonunlock

    $splitter = GUICtrlRead($combo)
    $arAus = StringSplit($splitter,' = ')

    $i = $arAus[1]

    RegWrite("HKEY_USERS\"&$arSid[$i]&"\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoRun", "Reg_DWord", "00000000")

    EndSwitch
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Wend

    , für Hilfe wäre ich sehr dankbar, da ich im Moment irgendwie auf`n Schlauch steh.

  • moin!

    warum das als admin so nicht weiß ich auch nicht genau, aber du könntest ja einfach deine Eintragungen in eine .reg Datei schreiben und die mit der "RunAs" Funktion als Administrator ausführen lassen.

  • Hallo,

    die RunAs kam mir auch schon in den Sinn, nur hört sich die Beschreibung laut der Hilfe ja so an das das auszuführende Programm auch dann auf dem dementsprechenden account ausgeführt wird(also auf den mit RunAs referenzierten), aber ich denke einen Test werd ich mal machen.

    Was mir halt taugen würde, wär ne Möglichkeit, die SID auch über die Domäne zu anzusprechen und die regwerte dann zu ändern, ich kapier einfach nicht wirklich warum das so nicht funktionieren sollte,

    naja, das leben is halt kein Wunschkonzert,

    danke für die Antwort

    Nachtrag:

    Das mit der *.reg, is ja so ganz nett, aber ich übergeb ja der RegWrite Funktion noch ne Variable welche die SID enthält, diese dann auch an die reg datei zu übergeben und dort in den jeweiligen String einzubauen könnte schwer werden, falls das überhaupt geht ?!

    Nachtrag 2:

    Hab mir jetzt auch nochmal die ComboBox genauer angesehn,
    könnte es sein das mit dem Default Wert irgendwas nicht passt und beim Setzen des RegWrite immer der falsche index Wert des Arrays verwendet wird?

    3 Mal editiert, zuletzt von Hotrod_Todd (3. September 2008 um 13:37)

  • zur combo: das stimmt so soweit ich das sehe.

    ich kenn mich da jetzt in der reg nicht so besonders aus, aber ich hab unter dem verzeichnis kein "norun" value gefunden, nur "NoDriveTypeAutoRun". liegt das evtl daran?

  • Der Registry Schlüssel soll ja über RegWrite erst angelegt werden deshalb findest du den bei dir auch nicht,
    das setzen dieses Schlüssels bewirkt das die Möglichkeit 'Ausführen' in der Windows Startleiste nicht angezeigt wird.

    Der RegWrite müsste soweit passen,
    bin die ganze Zeit am testen,
    auch mit RunAs, bin aber noch nicht weiter.

  • aber die *.reg datei kannst du ja auch von autoit schreiben lassen ;)

    FileOpen FileWrite und FileClose sollten dich weiterbringen ;)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • ...stimmt, da war ja noch was...

    Musste es jetzt aber eh anders machen, weil dat Dingen jetzt von einem USB Stick aus gestartet werden soll und deshalb die alte Lösung eigentlich funktioniert, nur jetzt bin ich am Frickeln wie ich nen AutoStart auf nen USB Stick bekomme, aber da gibt`s genug Meldungen dazu bereits hier.
    Muss jetzt nur was finden was ohne ein zusätzliches Programm auskommt, das man erst noch installieren müsste,

    danke an alle die mir ihre Hilfe angedeihen ließen,
    bis zum nächsten Problem.