Вопрос

Мне нужно удаленно установить службу Windows на несколько компьютеров, поэтому я использую CreateService() и другие сервисные функции из winapi.Я знаю пароль администратора и имя пользователя для компьютеров, к которым мне нужен доступ.Чтобы получить доступ к удаленной машине, я выдаю себя за вызывающий процесс с помощью LogonUser следующим образом:

//all variables are initialized correctly  
int status = 0;        
status = LogonUser(lpwUsername,        
               lpwDomain,         
                   lpwPassword,          
                   LOGON32_LOGON_NEW_CREDENTIALS,       
                   LOGON32_PROVIDER_DEFAULT,   
                   &hToken);            


if (status == 0)    
{   
         //here comes a error  
}  

status = ImpersonateLoggedOnUser(hToken);     
if (status == 0)                
{     
    //once again a error     
}      

//ok, now we are impersonated, do all service work there

Итак, я получаю доступ к компьютеру в домене, но некоторые компьютеры находятся вне домена.На машинах, которые находятся вне домена, этот код не работает.Есть ли какой-нибудь способ получить доступ к Service Manager на компьютере вне домена?

Это было полезно?

Решение

Вы можете это сделать, учетная запись должна существовать на удаленном компьютере, и вам нужно использовать имя компьютера в качестве доменного имени при вызове LogonUser.

Другие советы

Вместо того чтобы создавать свои собственные, почему бы просто не использовать встроенную команду SC?

Хорошо, проблема решена (на самом деле не очень хорошо, но скорее нормально).Я использовал WNetAddConnection() для ipc $ на удаленном компьютере.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top