Доступ к сетевым ресурсам из сервиса

Тема в разделе "WASM.WIN32", создана пользователем Tellur, 23 сен 2005.

  1. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    Пишу сервис. Сервис запускается под системным аккаунтом. Из сервиса пытаюсь открыть файл находящейся в сети. Файл не открывается. Пароля на ресурсе не стоит. Пробовал

    WNetAddConnection('\\FSERVER\BUH\',NIL,NIL);

    возвращает ошибку ERROR_INVALID_ADDRESS

    в чем дело не пойму
     
  2. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    Код (Text):
    1.   nr.dwType:=RESOURCETYPE_ANY;
    2.   nr.lpLocalName:=NIL;
    3.   nr.lpRemoteName:='\\FSERVER\BUH';
    4.   nr.lpProvider:=NIL;
    5.   res:=WNetAddConnection2(nr,NIL,'Гость',0);
    6.  


    тоже не работает. в этот раз вернула ERROR_ACCESS_DENIED.

    Очень подозрительно, доступ открыт всем полный доступ. А из-под системной ученой записи не коннектится. Из-под другой учетки (т.е. не сервис а просто приложение) этот же код выполняется на ура. может привилегии какие надо выставить?
     
  3. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    более правильно, наверное, так
    Код (Text):
    1. nr.dwType:=RESOURCETYPE_ANY;
    2.   nr.lpLocalName:=NIL;
    3.   nr.lpRemoteName:='\\FSERVER\BUH';
    4.   nr.lpProvider:=NIL;
    5.   res:=WNetAddConnection2(nr,'','Guest',0);


    теперь res==ERROR_NO_SUCH_LOGON_SESSION

    как создать эту сессию? помогите пожалуйста



    P.S. причем если в окне сервиса создать объект ShellTreeView, из него зайти в сетевое окружение, то спросив логин и пароль ("Guest" и "" соотв-но), он заходит в эту шару. Далее т.к. логин в шару уже произведен 1С запускается успешно. Это просто подтверждает возможность реализовать сие программно...
     
  4. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    На сколько мне ясно это делфи :)

    WNetAddConnection2(nr,'','Guest',0);

    пробовал

    WNetAddConnection2(nr,nil,'Guest',0);
     
  5. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    SteelRat

    не работат ни так, ни так



    вопрос остается открытым.



    Кому неохото возиться с написанием своего теста - вот пример на делфи (оставлен только код относящийся к сабжу - т.е. никаких OLE и пр.). Для быстрого тестирования, основной код вынесен в DLL, которая загружается каждый раз заново

    [​IMG] _241160500__ServiceTest.rar
     
  6. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    Вот тут нашел из-за чего возникает такая проблема

    http://www.rsdn.ru/Forum/Message.aspx?mid=58260&only=1

    из предложенных вариантов решения подходит только №4

    Неужели нельзя никак проще. Возникают сомнения, потому что вызов диалогового окна (если с флагом 8)

    WNetAddConnection2(nr,nil,'Guest',8);

    все подсоединяет, а без диалогового окна - никак не получается.

    Может у кого-нибудь есть исходники этой ф-ии?

    Неужели она вызывает CreateLogonSession()
     
  7. Sten

    Sten New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2003
    Сообщения:
    39
    Системный аккаунт по определению не имеет доступа к сети, из-за этого и все твои проблемы. Тебе нужно запускать сервис под нормальным доменным пользователем. Тогда все будет работать.
     
  8. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк


    Так я пробовал - действительно работает, но, к сожадению, не подходит, т.к. мне нужно из сервиса взаимодействовать с рабочим столом.

    Если кому интересно, заработало так (не знаю почему, но заработало) - и все под системным аккаунтом!
    Код (Text):
    1. WNetAddConnection2(nr,'','FSERVER\Guest',0);


    т.е. оказалось просто надо было указать имя пользователя в таком формате. Хотя в MSDN по этому поводу ничего не написано.

    А я уже полез с Kerberos авторизацией разбираться
     
  9. Sten

    Sten New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2003
    Сообщения:
    39
  10. Sten

    Sten New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2003
    Сообщения:
    39
    Интересно, может под гостем действительно и работает - если аутентификация не требуется. Но в общем случае надо имперсонировать юзера и лезть в сеть под нормальным аккаунтом.



    А вот делать интерактивный сервис - это уже криво и не секьюрно. MS мягко говоря не рекомендует так делать.