Форум: "Основная";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
ВнизСлужбы и иже с ними Найти похожие ветки
← →
Dimka Maslov © (2012-06-24 02:36) [0]Чего то я явно делаю неправильно, вот только чего - не пойму. Имеется служба - tcp сервер, слушает порт. При приходе на сервер определённой информации требуется запустить процесс от имени пользователя. Делаю сначала LogonUser потом CreateProcessAsUser. Симптоматика следующая:
XP - процесс запускается, работает, но при сохранении файла выдаётся ошибка, при этом окна программы не рисуются.
Win7 64 - процесс даже не запускается, хотя если убрать екзешник - выдаётся ошибка, что файла нет.
Может кто сталкивался и в курсе что, где и как надо прописать, чтобы работало?
← →
Cobalt © (2012-06-24 09:06) [1]Надо переписывать:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb756986.aspx
← →
Dimka Maslov © (2012-06-24 19:29) [2]
> Cobalt © (24.06.12 09:06) [1]
Пользовательский интерфейс мне не нужен. Мне надо запустить процесс с правами пользователя, но из службы "вторичный" процесс запускается и корректно работает только при запуске под локальной системой, тогда как ему (вторичному процессу) необходим доступ к ресурсам локальной сети с разделением прав пользователей.
← →
Dimka Maslov © (2012-06-24 21:20) [3]Проблема решена.
Достаточно было написать функциюBOOL SetUserObjectFullAccess(HANDLE UserObject)
{
PSECURITY_DESCRIPTOR Sd;
SECURITY_INFORMATION Si;
Sd = LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
InitializeSecurityDescriptor(Sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(Sd, TRUE, NULL, FALSE);
Si = DACL_SECURITY_INFORMATION;
BOOL Result = SetUserObjectSecurity(UserObject, &Si, Sd);
LocalFree((HLOCAL)Sd);
return Result;
}
И в промежутке между LogonUser и CreateProcessAsUser вызывать ея два раза:SetUserObjectFullAccess(GetThreadDesktop(GetCurrentThreadId()));
SetUserObjectFullAccess(GetProcessWindowStation());
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.048 c