Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2011, 18:01   #1
Pascal1983
Новичок
Джуниор
 
Регистрация: 28.02.2011
Сообщений: 2
По умолчанию Service Run Process

Добрый день!!! Какой уже день бьюсь над одной проблемой, но никак не могу ее решить.
Суть задачи следующая. Есть сервис написанный на Delphi XE. В нем крутиться idTCPServer который принимает от клиента команду дать снимок экрана, делает его и отсылает клиенту.
Операционная система Windows 7
Исходный код следующий:
hwinstaSave := GetProcessWindowStation;
dwThreadId := GetCurrentThreadId;
hdeskSave := GetThreadDesktop(dwThreadId);
WinSta := OpenWindowStation('WinSta0', False, WINSTA_READSCREEN);
SetProcessWindowStation( WinSta );
Desk := OpenDesktop( 'Default', 0 , False, DESKTOP_SWITCHDESKTOP );
SetThreadDesktop( Desk );
If NOT WTSQueryUserToken(WTSGetActiveConso leSessionId(), @h) Then
Begin
LogTCP.AddMessage := '[INFORMATION ' + DateTimeToStr(NOW) + '] ' + 'WTSQueryUserToken';
End;
If NOT DuplicateToken(h, SecurityImpersonation, @hh) Then
Begin
LogTCP.AddMessage := '[INFORMATION ' + DateTimeToStr(NOW) + '] ' + 'DuplicateToken';
End;
If NOT CreateEnvironmentBlock(UsrEnv, hh, FALSE) Then
LogTCP.AddMessage := '[INFORMATION ' + DateTimeToStr(NOW) + '] ' + 'CreateEnvironmentBlock';
Path := PWideChar(ExtractFilePath(ParamStr( 0)) + 'Project1.exe');
FillChar(StartInfo, SizeOf(StartupInfo), #0);
StartInfo.wShowWindow := SW_HIDE;
StartInfo.dwFlags := STARTF_USESHOWWINDOW;
Startinfo.lpDesktop := 'Winsta0\Default';
If NOT NTSetPrivilege(TRUE) Then //устанавиливаем привелегию seTCBPrivilege
LogTCP.AddMessage := '[INFORMATION ' + DateTimeToStr(NOW) + '] ' + 'NTSetPrivilege';
If NOT CreateProcessAsUser(hh, PWideChar(Path), NIL, NIL, NIL, FALSE, NORMAL_PRIORITY_CLASS OR CREATE_NEW_CONSOLE OR CREATE_UNICODE_ENVIRONMENT, UsrEnv, NIL, StartInfo, ProcessInformation) Then
LogTCP.AddMessage := '[INFORMATION ' + DateTimeToStr(NOW) + '] ' + IntToStr(GetLastError); //В этом месте возникает ошибка 5 - ACCESS DANIED.

В Windows Vista и 7 службы используют свой рабочий стол и сервисам запрещено использовать интерактивность.
В этом коде, если я не ошибаюсь, я переключаюсь на пользовательский рабочий стол, потом считаю привелегии пользователя и запускаю с параметрами текущего пользователя процесс. Все функции возвращают TRUE, кроме CreateProcessAsUser, возвращает ошибку 5 - ACCESS DANIED.

Может быть кто-то сталкивался с такой проблемой? И вообще можно ли в Windows 7 из сервиса сделать снимок экрана. Как я понял, что нет. Поэтому я и хочу запустить другой процесс, который следает мне снимок экрана и положит файл в нужное мне место, а я с помощью функции WaitForSingleObject, дождусь ее выполнения и отправлю из сервиса готовый файл со снимком экрана. Просто функция CreateProcess у меня работает, программа которая делает снимок экрана успешно отрабатывает, только получается в результате в файле белый экран, соответственно и клиент получает белый экран. Как я понял, это проиходит потому что программа стартует в сервисной рабочей станции.
Помогите кто может, никак не могу решить эту задачу, просто очень срочно нужно. Может быть есть какие нибудь другие альтернативные варианты получения снимка из сервиса?
Pascal1983 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
'Invalid floating point operation'. process stopped. Use Step or Run to continue. manick Общие вопросы Delphi 12 26.11.2011 21:37
process Aleander_beHDeP Общие вопросы C/C++ 1 29.03.2010 22:30
(process.h) Компилятор говорит Process не объявлен Парсифаль Общие вопросы C/C++ 0 15.02.2010 00:27
kill process const Общие вопросы C/C++ 2 28.08.2008 19:11
OpenProcessToken для процессов LOCAL SERVICE и NETWORK SERVICE M.A.R.K Win Api 12 04.05.2008 09:51