Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Lodoss
Цитата:
можно ли получить список всех учёток зарегестрированых на компе и обладающих администраторскими привелегиями?.
ну ты горазд задачки задавать... три дня колдовал на DllCall ... самое забавное, что на форуме AutoIt не нашел ни одного рабочего варианта... Зато теперь можно смело замахнуться на всю линейку NetApi32
Код: Выделить весь код
;===============================================================================
; Использование:     _NetLocalGroupGetMembers ($s_Group, [$s_Computer, [, $i_ShowDomain [, $i_Filter]]])
; Параметры:         $s_Group - имя локальной группы;
;                    $s_Computer - DNS или NetBIOS имя компьютера, пустая строка или пропущенный
;                       параметр равнозначны локальному компьютеру;
;                    $i_ShowDomain - "1" включить имя домена, "0" не включать;
;                    $i_Filter - набор флагов, задающих фильтр отбираемых записей:
;                        1 - пользователи,
;                        2 - группы,
;                       16 - предопределенные (WellKnown) группы,
;                       32 - удаленные учетные записи,
;                      128 - неизвестный тип.
; Результат:         При успешном завершении возвращает 1-мерный массив учетных записей,
 ;                       1-й элемент массива (индекс 0) содержит количество записей.
;                    При неудаче 1-й элемент содержит "-1" и @error указывает код ошибки
;
;===============================================================================

Func _NetLocalGroupGetMembers ($sGroup, $sServer = "", $iShowDom = 1, $iFilter = 511)
    Local $res [1] = [0], $uPTR= DllStructCreate ("ptr")
    If $iShowDom Then
        $iShowDom=2
    Else
        $iShowDom=1
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetLocalGroupGetMembers", _
        "wstr", $sServer, _
        "wstr", $sGroup, _
        "int", $iShowDom, _
        "ptr", DllStructGetPtr ($uPTR), _
        "int", -1, _
        "int_ptr", 0, _
        "int_ptr", 0, _
        "int_ptr", 0 )
    If $ret[0] Then
        SetError ($ret [0])
        $res[0] = -1
    Else
        If $ret[6]>0 Then
            Local $i, $string
            Local $uBUF = DllStructCreate ("ptr[" & $ret[6]*3 & "]", DllStructGetData ($uPTR,1) )
            For $i=3 To $ret[6]*3 Step 3
                If BitAnd (BitShift (1, 1 - DllStructGetData ($uBUF, 1, $i-1) ), $iFilter) Then
                    $ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _
                        "int", 0, _
                        "int", 0, _
                        "ptr", DllStructGetData ($uBUF, 1, $i), _
                        "int", -1, _
                        "str", "", _
                        "int", 0, _
                        "int", 0, _
                        "int", 0 )
                    $string = DllStructCreate ("char[" & $ret[0] & "]")
                    $ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _
                        "int", 0, _
                        "int", 0, _
                        "ptr", DllStructGetData ($uBUF, 1, $i), _
                        "int", $ret[0], _
                        "ptr", DllStructGetPtr ($string), _
                        "int", $ret[0], _
                        "int", 0, _
                        "int", 0 )
                    ReDim $res [$res[0]+2]
                    $res [0] = $res [0]+1
                    $res [$res[0]] = DllStructGetData ($string,1)
                EndIf
            Next
        EndIf
    EndIf
    DllCall ("netapi32.dll", "int" ,"NetApiBufferFree", _
        "ptr" , DllStructGetData ($uPTR,1) )
    Return $res
EndFunc

Последний раз редактировалось amel27, 17-11-2006 в 11:04. Причина: правка скрипта


Отправлено: 07:30, 03-11-2006 | #437