-
lead-in (21.05.08 11:45) [0]Добрый день. Есть такой вопрос - как узнать запущена ли какая-либо служба (net send, например) на удалённом пк, нужно вот отправить сообщение, а кроме net send`а ничево не знаю подходящего, вообще сообщение нужно отправить анонимно, net send показывает сетевое имя отправителя, а можно это сделать не раскрывая своего ip?
-
Сергей М. © (21.05.08 11:59) [1]
> нужно отправить анонимно
От кого шифруемся ?) -
lead-in (21.05.08 12:04) [2]Да никакой шифровки, поздравление с праздником просто, и чтоб не знали от кого)))
-
Сергей М. © (21.05.08 12:41) [3]
> как узнать запущена ли какая-либо служба (net send, например)
> на удалённом пк
Для этого нужно иметь административные права на целевом компе -
lead-in (21.05.08 12:59) [4]а их (прав) естественно нет, то есть никакими службами здесь не обойтись?
-
Сергей М. © (21.05.08 13:00) [5]Почтовой).. Если адресат по случаю праздника будет регулярно проверять почту)
-
lead-in (21.05.08 14:56) [6]Да в принципе))) но согласитель если выползает сообщение прям "на рабочий стол" - это намного неожиданней и соот-но приятней)))
-
Сергей М. © (21.05.08 15:00) [7]Не соглашусь)
Кому как) -
alexm_hs_ (23.05.08 21:14) [8]Никаких прав администратора не надо на чужом компе. Дяля получения списка служб и их состояния. если код нужен - скажите
-
> это намного неожиданней и соот-но приятней)))
Доставку цветов на дом лучше закажи. Там анонимно тоже можно. -
lead-in (16.06.08 12:09) [10]
> alexm_hs_
да конечно! привидите, если не трудно... время ещё есть -
multiflex (16.06.08 17:44) [11]Никакого смысла даже если и прочитаеш "список состояний", то уж запустить нужную службу без привилегий тебе точно не удастся. лучше засади на тот комп резидента, пускай висит себе %)
-
alexm_hs_ (16.06.08 22:45) [12]определить статус службы:
function TfSysInfo.ServiceStatus(hostaddr, ServiceName: string): cardinal;
var hSCManager: SC_HANDLE;
hService: SC_HANDLE;
lpServiceStatus: _SERVICE_STATUS;
begin
hSCManager := 0;
hService := 0;
try
hSCManager := OpenSCManager(PChar(hostaddr), nil, SC_MANAGER_ALL_ACCESS);
if hscManager <> 0 then begin
hService := OpenService(hSCManager, PChar(ServiceName), SERVICE_QUERY_STATUS);
QueryServiceStatus(hService, lpServiceStatus);
result := lpServiceStatus.dwCurrentState;
end else result := 0;
finally
if hService <> 0 then CloseServiceHandle(hService);
if hscManager <> 0 then CloseServiceHandle(hscManager);
end;
end;
Расшифровка кодов есть в MSDN.
вот к примеру, как у меня сделано:
StatusText: array[SERVICE_STOPPED..SERVICE_PAUSED] of string =
('Остановлена', 'Ожидание запуска', 'Ожидание останова', 'Запущена',
'Ожидание продолжения', 'Ожидание приостанова', 'Приостановлена');
вот как запустить/остановить службу
function TfSysInfo.StartStopService(pcname, ServName: string; startstop: integer): integer; //start - 1, stop - 0; 2 - pause; 3 - continue;
var
hscManager, hService: LongWord;
sStatus: TServiceStatus;
lpServiceArgVectors: PChar;
begin
result := 0;
hService := 0;
hscManager := OpenSCManager(PChar(pcname), nil, SC_MANAGER_ALL_ACCESS);
try
if hscManager <> 0
then
case startstop of
0: begin
hService := OpenService(hscManager, PChar(ServName), SERVICE_STOP);
ControlService(hService, SERVICE_CONTROL_STOP, sStatus);
result := 0;
end;
1: begin
lpServiceArgVectors := nil;
hService := OpenService(hscManager, PChar(ServName), SERVICE_ALL_ACCESS);
if hService <> 0 then StartService(hService, 0, PChar(lpServiceArgVectors));
result := 0;
end;
2: begin
hService := OpenService(hscManager, PChar(ServName), SERVICE_PAUSE_CONTINUE {SERVICE_ALL_ACCESS});
ControlService(hService, SERVICE_CONTROL_PAUSE, sStatus);
result := 0;
end;
3: begin
hService := OpenService(hscManager, PChar(ServName), SERVICE_PAUSE_CONTINUE {SERVICE_ALL_ACCESS});
ControlService(hService, SERVICE_CONTROL_CONTINUE, sStatus);
result := 0;
end;
end
else begin
result := GetLastError
end;
finally
if hService <> 0 then CloseServiceHandle(hService);
if hscManager <> 0 then CloseServiceHandle(hscManager);
end;
end;
однако, если не имеете привилегий администратора на удаленном компьютере, с запуском/остановом ничего не выйдет. надо будет устанавливать подключение к IPC с логином и паролем пользователя, обладающим этими привилегиями. Удачи -
alexm_hs_ (16.06.08 22:49) [13]да! и не забудьте подключить к проекту модуль WinSvc :)
-
Rouse_ © (17.06.08 11:02) [14]
> alexm_hs_ (23.05.08 21:14) [8]
>
> Никаких прав администратора не надо на чужом компе
Точно уверен? -
alexm_hs_ (17.06.08 19:23) [15]Ах, да! Извиняюсь! Днем сегодня сам уже подумал.
конечно же вот здесь другой флаг (в первой функции)
hSCManager := OpenSCManager(PChar(hostaddr), nil, SC_MANAGER_CONNECT); -
lead-in (18.06.08 13:36) [16]
> alexm_hs_
спасибо! буду пробовать)...