• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Написание сервиса

  • Автор темы lifer
  • Дата начала
Статус
Закрыто для дальнейших ответов.
L

lifer

Подскажите, в чем дело: мой сервис не может создать файл на сетевом диске, а на обычных дисках запросто. Причем обычная прога (не сервис) файл на сетевом диске создает.
Я использовал функции CreateFile и fopen-безрезультатно. Сервис у меня интерактивный, запускается в контексте LocalSystem аккаунта-может в этом дело? Хотя неинтерактивный сервис также не может записать файл на сетевой диск. Помогите, кто знает! Кстати, CreateFile возвращает код 3, который означает The system cannot find the path specified.
 
B

Barmutik

Стандартная проблема ..

Под каким пользователем запущен сервис? Скорее всего под системным аккаунтом .. так вот .. а замапленные сетевые диски существуют ТОЛЬКО в Вашей сессии..

Т.е. например если Вы замапили сетевой путь на букву G:, то серис ничего не знает про путь к примеру G:\1.tmp.

Решение проблемы крайне простое .. сипользуйте для создания UNC пути ... т.е. вместо G:\ пишите \\имя моего сервера\расшаренный ресурс\... ну и дальше куда уже нужно ...

Само собой достпу в эту шару должен быть разрешеён тому пользователю под которым запущен сервис... существуют гтовые системные функции для перевода пути в UNC путь...
 
L

lifer

Слушай, Barmutik...Расскажи поподробнее про функции преобразования пути в UNC путь! Допустим, мой сервис из реестра берет строку, которая является путем, но обычным, т.е. имя_диска:\и т.д. Можно ли вызвать функцию, которая определит, является ли диск сетевым, и если да, то автоматически преобразует путь? Я в MSDN глянул по слову UNC, но ничего полезного не нашел:( Помоги плиз, если знаешь!
 
B

Barmutik

Слушаю .. :(

Вообщем там не всё что бы совсем так всё просто .. используйте... WNetGetUniversalName, под 9х глючит .. но есть воркароунд ...

Если надо могу привести пример на Паскале всей функции ...
 
L

lifer

Не, примера не надо. Спасибо большое за подсказку, я нашел все нужные функции, всё работает! Есть функция PathIsNetworkPath,определяющая, является ли путь сетевым, однако из под сервиса она скорее всего не работает, т.к. мой сервис ничего о шарах не знает. Я в своем сервис манаджаре заранее определяю путь, изменяю если надо с помощью WNetGetUniversalName и записываю в реестр. Но если бы ты ты не подсказал насчет системного аккаунта, так и не допер бы. Спасибо!
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!