RegistryRemote

  • Hallo!

    Also ich bin dabei mein kleines Tool IHK_MyAdmin Registry-Remotetüchtig zu machen.

    Dabei gibt es nun aber einen hacken.

    Wenn man Registryeinträge über remote bearbeiten will wird das unter folgendem Key Passieren:

    HKEY_Userers\S-x-x-x-xxxxx.... usw gemacht

    für die x(e) steht in wirklichkeit die SID.
    So jeder User im Netzwerk hat eine eigene SID.

    Es geht nun darum:
    Wenn ich nun einen Benutzer anklicke soll das Programm erkennen welche SID der Benutzer hat und diese dann im Pfad einsetzen.

    Das Problem dabei ist wie ich es erkennen lasse welche SID welcher Benutzer hat. Die SId steh ja in der Reistry aber ich habe sie Nirgens als Value gefunde sondern nur als Schlüsselname.

    Eine möglichkeite wäre alles in eine Datanebank einzupflegen.
    Das möchte ich aber ungern.

    Vielleicht könnt ihr liebe Commnunity mir andere möglchkeiten nennen bzw wo ich die SID als wert jeweils finde.

    • Offizieller Beitrag

    Hi,

    oder dies:

    [autoit]

    dim $SID

    [/autoit][autoit][/autoit][autoit]

    $SID = _UserSID()
    ;$SID = _UserSID("UserName")
    ;$SID = _UserSID('UserName', 'RemoteComputerName')

    [/autoit][autoit][/autoit][autoit]

    if IsArray($SID) Then
    for $x = 1 to $SID[0][0]
    msgbox(0, 'User SID', $SID[0][$x] & ' ====> ' & $SID[1][$x])
    Next
    Else
    MsgBox(0, "", "Is not an Array.")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ;===============================================================================
    ; Function Name: _UserSID()
    ;
    ; Description: Return a 2 dimensional array first username second SID.
    ;
    ; Syntax: _UserSID ( [$s_UserName, $s_RemoteComputer] )
    ;
    ; Parameter(s): $s_UserName = Username to get SID.
    ; $s_RemoteComputer = ComputerName on the network
    ;
    ; Requirement(s): External: = None.
    ; Internal: = None.
    ;
    ; Return Value(s): On Success: = Returns 2 dimensional array with UserName, SID and sets @error to 0.
    ; On Failure: = Returns "" and sets @error to 1.
    ;
    ; Author(s): Dan Colón
    ;
    ; Note(s):
    ;
    ; Example(s):
    ; _UserSID("DColon") it will return DColon SID
    ; _UserSID() it will return every user SID
    ;===============================================================================

    [/autoit][autoit][/autoit][autoit]

    Func _UserSID($s_UserName = "All", $s_RemoteComputer = '')
    If $s_UserName = '' Then $s_UserName = 'All'
    If $s_RemoteComputer <> '' Then
    If StringMid($s_RemoteComputer, 1, 1) <> '\' Or StringMid($s_RemoteComputer, 2, 1) <> '\' Or StringRight($s_RemoteComputer, 1) <> '\' Then
    $s_RemoteComputer = '\\' & StringReplace($s_RemoteComputer, '\', '') & '\'
    EndIf
    EndIf

    Local $line, $var, $ProfilePath, $i = 1
    Local Const $regkey = $s_RemoteComputer & "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\"
    Local Const $regkeyval1 = "ProfilesDirectory"
    Local Const $regkeyval2 = "ProfileImagePath"

    $ProfilePath = RegRead($regkey, $regkeyval1)
    While 1
    $line = RegEnumkey($regkey, $i)
    $var = RegRead ( $regkey & $line, $regkeyval2)
    If @error = 1 Or @error = -1 Then ExitLoop
    If $s_UserName == "All" Then
    If Not IsDeclared("aArray") Then Dim $aArray[1][1]
    ReDim $aArray[UBound($aArray) + 1][UBound($aArray) + 1]
    $aArray[0][UBound($aArray) - 1] = StringMid($var, StringInStr($var, '\', 0, -1) + 1)
    $aArray[1][UBound($aArray) - 1] = $line
    $aArray[0][0] = UBound($aArray) - 1
    ElseIf StringLower($var) == StringLower($ProfilePath & "\" & $s_UserName) Then
    If Not IsDeclared("aArray") Then Dim $aArray[1][1]
    ReDim $aArray[UBound($aArray) + 1][UBound($aArray) + 1]
    $aArray[0][UBound($aArray) - 1] = StringMid($var, StringInStr($var, '\', 0, -1) + 1)
    $aArray[1][UBound($aArray) - 1] = $line
    $aArray[0][0] = UBound($aArray) - 1
    EndIf
    $i = $i + 1
    WEnd
    If Not IsDeclared("aArray") Then
    SetError(1)
    Return("")
    Else
    SetError(0)
    Return($aArray)
    EndIf
    EndFunc

    [/autoit]

    So long,

    Mega