Mario писал(а):Админ. права имееются. Но как это сделать? )
Делается это через функцию работы с менеджером системных служб OpenSCManager, он имеет первый параметр lpMachineName в котором ты указываешь имя уделенного компа или его IP. Ну, конечно, если ты тупо подставишь IP, то доступ на удаленную машину не получишь, потому что функция возьмет учетную запись того пользователя в контексте которого она будет вызвана. Удаленный комп очень удивиться, что к нему пытается прорваться какой-то амин Vasya о котором он ничего не знает. Последствия соответствующие.. Для того чтобы явным образом авторизироваться нужно воспользоваться свойством протокола SMB. Microsoft для удобства сделал так, что один раз получив доступ с регистрацией на удаленный комп, и вся последующая работа с ним будет выполнятся под этими же правами автоматически. Вот это и есть SMB. Если интересно, почитай Wiki (Принцип работы SMB). Для авторизации берем WNetAddConnection2, естественно после того, как ты пропинговал удаленную машину, как ты это делал, и убедился, что она работает в данный момент. Подключаемся по IPC$.
- Код: Выделить всё
Private Type NETRESOURCE
dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
lpLocalName As String
lpRemoteName As String
lpComment As String
lpProvider As String
End Type
Private Const CONNECT_UPDATE_PROFILE = &H0
Private Const RESOURCETYPE_ANY = &H0
Private Const NO_ERROR = 0&
Private Function NetAddConnection() As Long
Dim NetRes As NETRESOURCE
With NetRes
.dwType = RESOURCETYPE_ANY
.lpLocalName = "" & Chr(0)
.lpRemoteName = "\\192.168.129.41\IPC$" & Chr(0)
End With
StrUserName = "UserName"
StrPassword = "Password"
dwStatus = WNetAddConnection2(NetRes, StrPassword, StrUserName, CONNECT_UPDATE_PROFILE)
If dwStatus = NO_ERROR Then
MsgBox "Выполнено!", vbInformation
Else
MsgBox "Нет подключения", vbExclamation
End If
Exit Function
Как только подключились, вызываем SCM, используя тоже IP или имя.
- Код: Выделить всё
Const SERVICES_ACTIVE_DATABASE = "ServicesActive"
Const SC_MANAGER_CONNECT = &H1&
Dim hSCManager As Long
Dim hService As Long
StrCompName = "\\192.168.129.41"
hSCManager = OpenSCManager(StrCompName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT)
Получив хэндл hSCManager открываем сервис.
- Код: Выделить всё
Const Service_Name = "RemoteRegistry" 'Служба Удаленный реестр
hService = OpenService(hSCManager, ServiceName, SERVICE_ALL_ACCESS)
После это включаем службу (по умолчанию она обычно вообще выключена) через функцию ChangeServiceConfig с параметром dwStartType= SERVICE_AUTO_START, например, или другим. Потом запускаем через функцию StartService. Вот так, примерно, получаем доступ к удаленному реестру, а потом уже можешь выполнять в нем поиск.