Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CreateProcessAsUser 
:(
    Опции темы
Вася К.
Дата 13.7.2007, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 9.2.2005

Репутация: нет
Всего: нет



Код

if LogonUser('admin', '', 'password', LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, phToken) then begin
    FillChar(stin, SizeOf(stin), 0);
    stin.cb := SizeOf(stin);
    stin.dwFlags := STARTF_USESHOWWINDOW;
    stin.wShowWindow := SW_SHOWNORMAL;
    if not CreateProcessAsUser(phToken, nil, pAppName, nil, nil, False, NORMAL_PRIORITY_CLASS  or DETACHED_PROCESS, nil, nil, stin, prin) then
      Log('cs.RunTask. CreateProcessAsUser failed.', GetLastError);
  end
  else
    Log('cs.RunTask. LogonUser returned False.', GetLastError);
  CloseHandle(phToken);

Здраствуйте!

Вот этот код запускает программу из сервиса. Программа запускается, но отрисовываются только заголовок окна (и то без caption-a) и границы, а внутри окна все прозрачно. Но если кликнуть в том месте, где есть , предположим, кнопка, это место сереет, то, что связано с кликом на кнопку, происходит. Но почему все это дело нормально не отрисовывается, не пойму.
--------------------
Да здраствует ОПТИМИЗМ!
PM MAIL YIM   Вверх
bartram
Дата 13.7.2007, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Вася К., попробуй у сервиса включить взаимодействие с рабочим столом.


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Вася К.
Дата 16.7.2007, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 9.2.2005

Репутация: нет
Всего: нет



Пробовал, много чего перепробовал ....  smile  smile 
--------------------
Да здраствует ОПТИМИЗМ!
PM MAIL YIM   Вверх
TerminalHead
Дата 27.3.2008, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.3.2008

Репутация: нет
Всего: нет



Цитата(Вася К. @ 13.7.2007,  09:05)
Вот этот код запускает программу из сервиса. Программа запускается, но отрисовываются только заголовок окна (и то без caption-a) и границы, а внутри окна все прозрачно. Но если кликнуть в том месте, где есть , предположим, кнопка, это место сереет, то, что связано с кликом на кнопку, происходит. Но почему все это дело нормально не отрисовывается, не пойму.

У меня такая же проблема возникла!
Решение не нашлось ?
PM MAIL   Вверх
bems
Дата 27.3.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



в STARTUPINFO нужно указать имя десктопа


--------------------
Обижено школьников: 8
PM MAIL   Вверх
TerminalHead
Дата 27.3.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.3.2008

Репутация: нет
Всего: нет



Не помогло :(
Код

LogonUser('test',nil,'test',LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,h);
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
si.lpDesktop:=PChar('WinSta0'+'\'+'default');
si.lpTitle:= PChar('SYSTEM');
si.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
si.wShowWindow := SW_NORMAL;
if not CreateProcessAsUser(h,nil,'c:\calc.exe',nil,nil,False,0,nil,nil,si,pi)
then begin
// RaiseLastWin32Error;
Exit;
end;

PM MAIL   Вверх
bems
Дата 28.3.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



если твой calc.exe не консольный, то lpTitle должен быть nil

Добавлено через 3 минуты и 1 секунду
и еще ты используешь STARTF_USESTDHANDLES с нулевыми hStdInput, hStdOutput и hStdError


--------------------
Обижено школьников: 8
PM MAIL   Вверх
MetalFan
Дата 28.3.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(bems @  28.3.2008,  18:14 Найти цитируемый пост)
и еще ты используешь STARTF_USESTDHANDLES с нулевыми hStdInput, hStdOutput и hStdError 
... которые предназначены как раз для обработки ввода-вывода консольного приложения


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
bems
Дата 28.3.2008, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(MetalFan @  28.3.2008,  20:05 Найти цитируемый пост)
... которые предназначены как раз для обработки ввода-вывода консольного приложения 
не обязательно



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Virtuals
Дата 30.3.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



ня, лень писать коммент. спать охота
Код

function SetUserObjectFullAccess(hUserObject: THandle): Boolean;
var
  Sd: PSecurity_Descriptor;
  Si: Security_Information;
begin
  Sd := PSecurity_Descriptor(LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH));
  InitializeSecurityDescriptor(Sd, SECURITY_DESCRIPTOR_REVISION);
  SetSecurityDescriptorDacl(Sd, True, nil, False);

  Si := DACL_SECURITY_INFORMATION;
  Result := SetUserObjectSecurity(hUserObject, Si, Sd);

  LocalFree(HLOCAL(Sd));
end;


procedure CreateProcAsUserEx(const UserDomain, UserName, Password, CommandLine: string;
  const Environment: PChar);
const
  CreateProcDEFWINSTATION = 'WinSta0';
  CreateProcDEFDESKTOP    = 'default';
  CreateProcDOMUSERSEP    = '\';
var
  ConsoleTitle: string;
  Help: string;
  WinStaName: string;
  DesktopName: string;
  hUserToken: THandle;
  hWindowStation: HWINSTA;
  hDesktop: HDESK;
  StartUpInfo: TStartUpInfo;
  ProcInfo: TProcessInformation;
begin
  if not LogonUser(PChar(UserName), PChar(UserDomain), PChar(Password),
    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hUserToken) then
  begin
    case GetLastError of
      ERROR_PRIVILEGE_NOT_HELD:;
      ERROR_LOGON_FAILURE:;
      ERROR_ACCESS_DENIED:;
    end;
  end;

  hWindowStation:= GetProcessWindowStation;
    WinStaName := CreateProcDEFWINSTATION;

  if not SetUserObjectFullAccess(hWindowStation) then
  begin
    CloseHandle(hUserToken);
  end;

  hDesktop := GetThreadDesktop(GetCurrentThreadId);
  DesktopName := GetUserObjectName(hDesktop);
    DesktopName := CreateProcDEFDESKTOP;
  if not SetUserObjectFullAccess(hDesktop) then
  begin
    CloseHandle(hUserToken);
  end;

  ConsoleTitle := UserDomain + UserName;
  FillChar(StartUpInfo, SizeOf(StartUpInfo), #0);
  with StartUpInfo do
  begin
    cb:= SizeOf(StartUpInfo);
    lpTitle:= PChar(ConsoleTitle);
    Help := WinStaName + '\' + DeskTopName;
    lpDesktop:= PChar(Help);
  end;

  if not CreateProcessAsUser(hUserToken, nil, PChar(CommandLine),
    nil, nil, False, CREATE_NEW_CONSOLE or CREATE_NEW_PROCESS_GROUP,
    Environment, nil, StartUpInfo, ProcInfo) then ;

  if not SetDelUserObjectFullAccess(hDesktop) then
  begin
  end;
  if not SetDelUserObjectFullAccess(hWindowStation) then
  begin
  end;

  // clean up
  CloseWindowStation(hWindowStation);
  CloseDesktop(hDesktop);
  CloseHandle(hUserToken);

  CloseHandle(ProcInfo.hThread);
  CloseHandle(ProcInfo.hProcess);
end;
//------------------------------------------------------------------------------javascript: sendForm('submit');


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.