
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Сообщ.
#1
,
|
|
|
(Win2K)
У меня так сказать 2 проблемы вероятно вторая связана с первой. Суть такая: Требуется из службы подключить сетевой ресурс. по умолчанию как я понял служба запускается от SYSTEM у которой нет на это прав, по крайней мере при попытке подключить диск выдается код ошибки "5" а при попытке подключить IPC$ код ошибки "0" но всеравно ничег оне подключается. Попробовал подключить сетевой диск из программы запущенной от администратора все подключилось нормально. Следовательно думаю... Вероятно надо запустить сервис от администратора. Как прочитал 2 последних параметра это Username и Password - создал учетку "test" c паролем "test" добавил в группу "администраторы" - Указал эти данные при создании сервиса. - Запустил сервис - Результат подключения сетевого диска "5" (отказано в доступе.) Или я совсем ничего не понял или я что-то не так делаю... подскажите пожалуйста: Можно ли как нибудь добавить права что бы сервис запущенный от SYSTEM мог подключать сетевые ресурсы? (это более хотелось бы) И собственно сам сабж что я вообще туда куда надо и в том виде запихнул данные от кого запускать сервис? ![]() ![]() sHndl:=CreateService(SCHndl,PChar(ServiceName),PChar(ServiceDisplayName),SERVICE_ALL_ACCESS,ServiceType,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL, PChar(ParamStr(0)),Nil,Nil,nil,'test,'test'); |
Сообщ.
#2
,
|
|
|
А для кого сервис подключает диски? для себя?
если попробовать CreateProcessWithLogonW + "net use"? |
Сообщ.
#3
,
|
|
|
CreateProcessWithLogonW - это функция типа CreateProcess?
Просто я не особо хочу из сервиса стартовать какие то .exe .bat и тп Да сервис подключает ресурс для себя. Попробовал запустить сервис с указанием Domain\Login (.\Login) и Password с учетки в домене имеющую админские права на локальном компе и являющуюся админом домена написало что "logon failure" при запуске сервиса в рабочей группе сервис хоть запускается но похоже игнорирует Login и Password Вообще задача следующая: Я пытаюсь поставить сервис удаленно для этого надо подключить шару IPC$ после этого при использовании OpenScManager будут использоваться учетные данные которые были использованы для подключения IPC$ (первое подключение) может есть и другие способы решения проблемы но я не в курсе. вот и пробую решить проблему... Сервис написал... Вручную шару подключил, сервис поcтавился куда было указано ок. Теперь проблема подключить шару IPC$ (автоматом) |
Сообщ.
#4
,
|
|
|
Цитата Требуется из службы подключить сетевой ресурс. по умолчанию как я понял служба запускается от SYSTEM у которой нет на это прав Доступ к сети из под SYSTEM - не самая удачная идея. SYSTEM - это самая высокопривелегированная учётная запись. Соответственно, есть мнение, что такой мощный компонент от сети может изолироваться (точно не уверен). Для работы с сетью есть учётная запись NetworkService, которая не обладает столь высокими полномочиями как SYSTEM. В некоторых случаях правильным решением будет иметь две программы (либо служба + программа, либо служба + служба), общающиеся через IPC. Вторая возможная причина - ты неверно указываешь учётку при подключении ресурса. |
Сообщ.
#5
,
|
|
|
Ну то что она совсем с сетью не совмещается это уж не так... черзе сервис спокойно копируется на сетевые ресурсы туда и обратно...
без проблем получаются список доменов и компьютеров... перечисляются расшаренные ресурсы... Неужели нельзя сделать что бы подключать как то ресурсы... вот к примеру в семерке не пашет WNetOpenEnum из под SYSTEM пишет нет сети или чтото в этом духе... добавив в прогу ![]() ![]() if not LogonUser('Администратор', 'WORKGROUP', 'XXXXXXXXXXXXXXXX', LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hUserToken) then begin {WriteResDisk} End; ImpersonateLoggedOnUser(hUserToken); WNetOpenEnum начинает работать но все равно сетевые ресурсы не подключаются в 2К все это пашет и без этого но так же сетевые ресурсы не подключаются. Может быть можно какие то привилегии поставить я вижу каких то куча есть но с ними ни разу не работал не знаю дает ли чтото из этого нужное или нет ![]() ![]() //"SeCreateTokenPrivilege" //"SeAssignPrimaryTokenPrivilege" //"SeLockMemoryPrivilege" //"SeIncreaseQuotaPrivilege" //"SeUnsolicitedInputPrivilege" //"SeMachineAccountPrivilege" //"SeTcbPrivilege" //"SeSecurityPrivilege" //"SeTakeOwnershipPrivilege" //"SeLoadDriverPrivilege" //"SeSystemProfilePrivilege" //"SeSystemtimePrivilege" //"SeProfileSingleProcessPrivilege" //"SeIncreaseBasePriorityPrivilege" //"SeCreatePagefilePrivilege" //"SeCreatePermanentPrivilege" //"SeBackupPrivilege" //"SeRestorePrivilege" //"SeShutdownPrivilege" //"SeDebugPrivilege" //"SeAuditPrivilege" //"SeSystemEnvironmentPrivilege" //"SeChangeNotifyPrivilege" //"SeRemoteShutdownPrivilege" В то м то и дело что интересно сделать без дополнительных сервисов и прог. |
Сообщ.
#6
,
|
|
|
вот тут Открытие шары на ПК в домене с ПК в воркгруппе Rouse посоветовал WNetAddConnection2() (сам с ней связываться не стал потому что шары мне не нужны, а имперсонализация это крутовато для моей проги
![]() |
Сообщ.
#7
,
|
|
|
Цитата WNetOpenEnum начинает работать Есть мнение, что это указывает на то, что ты неверно подключаешь ресурсы. LogonUser и ImpersonateLoggedOnUser работают исключительно локально. Если с ними работает, то это значит, что в функцию подключения ресурсов ты не передал учётку (или передал неправильно), поэтому функция использовала активный аккаунт. Цитата но все равно сетевые ресурсы не подключаются в 2К все это пашет и без этого но так же сетевые ресурсы не подключаются Отсыпь, чего курил. |
Сообщ.
#8
,
|
|
|
Цитата Отсыпь, чего курил. ![]() Сорри я просто совсем плохо в этом всем разбираюсь по этому выражаюсь своими словами (что вероятно совсем не значит то что я думаю, хотя я думаю что это значит то что я думаю) Попробую переформулировать Служба запущена от SYSTEM В Win2K Без всяких LogonUser и ImpersonateLoggedOnUser перечисляются домены, компьютеры, шары на них открытые и тп в Windows 7 без LogonUser и ImpersonateLoggedOnUser не перечисляются ... При указании логина и пароля при запуске сервиса происходит одно и то же что в Windows 7 что Win2K ![]() ![]() Ставлю сервис на локальный комп. Учетка test добавлена в группу администраторы. sHndl:=CreateService(SCHndl,PChar(ServiceName),PChar(ServiceDisplayName),SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG,ServiceType,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL, PChar(ParamStr(0)),Nil,Nil,Nil,'test','test'); sHndl:=CreateService(SCHndl,PChar(ServiceName),PChar(ServiceDisplayName),SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG,ServiceType,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL, PChar(ParamStr(0)),Nil,Nil,Nil,'.\test','test'); sHndl:=CreateService(SCHndl,PChar(ServiceName),PChar(ServiceDisplayName),SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG,ServiceType,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL, PChar(ParamStr(0)),Nil,Nil,Nil,'WORKGROUP\test','test'); sHndl:=CreateService(SCHndl,PChar(ServiceName),PChar(ServiceDisplayName),SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG,ServiceType,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL, PChar(ParamStr(0)),Nil,Nil,Nil,PChar('test'),PChar('test')); sHndl:=CreateService(SCHndl,PChar(ServiceName),PChar(ServiceDisplayName),SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG,ServiceType,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL, PChar(ParamStr(0)),Nil,Nil,Nil,PChar('.\test'),PChar('test')); sHndl:=CreateService(SCHndl,PChar(ServiceName),PChar(ServiceDisplayName),SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG,ServiceType,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL, PChar(ParamStr(0)),Nil,Nil,Nil,PChar('WORKGROUP\test',PChar('test')); (так пробовал) D:\PROGRAMS\TEST>test.exe install \\COMPUTER test Connecting Service Control Manager...Ok Creating service database record...Failed! Error: 1057 Имя учетной записи задано неверно или не существует, или же неверен указанный пароль. Если сначала поставить сервиc потом заменить exe на ту где в CreateService указаны Login и Password то происходит: D:\PROGRAMS\TEST>net start test Служба "test" запускается. Служба "test" успешно запущена. Но запущена от SYSTEM Вроде один из вариантов указания должен был быть правильным. Подключение шары вроде тож пробовал и так и сяк (периодически выдает результат 0, но но net use не видно ничего) ![]() ![]() netresource.dwtype := resourcetype_ANY; netresource.lplocalname := ''; netresource.lpremotename := '\\COMPUTER'; netresource.lpprovider := ''; Status:=wnetaddconnection2(netresource, 'test', 'test', connect_update_profile); что без LogonUser и ImpersonateLoggedOnUser что с LogonUser и ImpersonateLoggedOnUser, что на win7 xnj yf Win2K результат выполнения всегда "0" по net use ничего не видно Status:=0; netresource.dwtype := resourcetype_ANY; netresource.lplocalname := 'R:'; netresource.lpremotename := '\\COMPUTER\c$'; netresource.lpprovider := ''; Status:=wnetaddconnection2(netresource, 'test', 'test', connect_update_profile); Без LogonUser и ImpersonateLoggedOnUser результат выполнения "5" отказано в доступе по net use ничего есесно не видно либо при использовании того что выше результат выполнения "0" но опять же по net use ничего не видно (Ну пробовал на всякий случай так же как и при CreateService пробовал варианты с PChar('R:');например) Разьве я неправильно указываю? Цитата >>To CodeMonkey служба + служба общающиеся через IPC. (сорри если я опять правильно понимюа суть написаного) я и пытаюсь подключить IPC$ из службы Добавлено Таааааааааакккк ))))))))))) Сорри а вообще оно должно быть видно по "net use" то что я там пытаюсь подключить? Попробовал файл скопировать с R: вроде все копируется ))) |
Сообщ.
#9
,
|
|
|
В общем не понимаю ничего все кажется оказалось проще чем я думал...
IPC$ подключается от системы спокойно без свякого пароля если на удаленном компе есть такой же юзер если в домене то тож подкючается спокойно, ну если нет такого юзера надо указывать Login и Password и использовать эти LogonUser и ImpersonateLoggedOnUser А Самое главное оказалось что оно при запуске от SYSTEM не отображается по "net view" я сегодня весь день извращался пытаясь соединение увидеть глазами вместо того что бы проверить а существует ли оно реально или нет. Вроде на текущий момент вопрос решился (вроде как) спасибо CodeMonkey за мыслю Цитата Есть мнение, что это указывает на то, что ты неверно подключаешь ресурсы. если я все подключаю правильно и код ошибки "0" логично предположить было сразу что все работает (ну почти все) спасибо |