169 похожих чатов

Господа, нужна помощь. Задача: подключиться из сервиса к расшаренной папке

с паролем.
Собственно понятно что по умолчанию сервис под LOCAL SYSTEM из которой подключаться нельзя. Поэтому пишем примерно такой код (DriveName оставляю пустым чтобы обращаться по сетевому пути, в user, pass передаю логин пароль пользователя которому разрешен доступ).
procedure ConnectNetDrive(const DriveName, Machine, User, Pass : string);
var NRW: TNetResource;
v: DWord;
Token: NativeUInt;
res: string;
begin
with NRW do
begin
dwScope := RESOURCE_GLOBALNET;
dwType := RESOURCETYPE_ANY;
dwUsage := RESOURCEUSAGE_CONNECTABLE;
dwDisplayType := RESOURCEDISPLAYTYPE_SHARE;
lpLocalName := pchar(DriveName);
lpRemoteName := pchar(machine);
lpComment := nil;
lpProvider := '';
end;
if not LogonUser('NETWORK SERVICE', 'NT AUTHORITY', nil, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, Token ) then
RaiseLastOSError;
if not ImpersonateLoggedOnUser(Token) then
RaiseLastOSError;
v := WNetAddConnection2(NRW, pchar(pass), pchar(user), CONNECT_TEMPORARY);

И что интересно, ConnectNetDrive2 возвращает 0, но прочитать из папки ничего нельзя.
Ладно, может что-то не так с имперсонализацией. Создаю другого пользователя администратора, убираю LogonUser и Impersonate, оставляю только WNetAddConnection2. Та же картина.
При этом если запустить сервис из под того пользователя кому разрешен доступ, то он папку видит.
Что за ерунда? Ошибок нет, доступ не работает.

1 ответов

11 просмотров

А почему бы не сделать так? можно же все подключить через консоль, если не через консольть, тогда сперва административный глобальный ресурс IPC$ net use \\nethost\IPC$ %pwd% /user:%user% а потом обращаемся к нужной директории \\nethost\haredir

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
86
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Как добавить ссылку в Быстрый доступ в Проводнике windows 10? Нашёл, как на power shell сделать, но может есть способ через Дельфи?
А
31
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
@rouse_79 а ты не знаешь простого способа определить что приложение запущено из под среды delphi?
Михаил
16
Я тут пытаюсь переработать архитектуру подсистемы памяти ядра во что-то осмысленное. Есть pmm, который создает набор range’ей(пока что только для ядра, потом для юзерспейса), ...
Evg Resh
19
Обязательно ли смена методологии обучения алфавиту при смене алфавита(реформе письменности) - нет. А при смене глиненых табличек на попирус, нужно ли менять методологию обучен...
Spiker01
8
Скажите, можно ли как-то "переместить" динамический массив из одной переменной в другую? Скажем, переместить из TList<> в TArray<>. Именно переместить, а не скопировать. Если ...
Eugene Krasnikov (ᴊɪɴ x)
37
Карта сайта