![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Необходимо из сервиса запустить интерактивный EXE. [D7, WinXP]
Still Swamp © (2005-09-16 13:51:00)Необходимо из сервиса запустить интерактивный EXE. Я попробовал запустить calc.exe c помощью ShellExecute. Не получилось. Точнее процесс запустился но окошка я не увидел. Как это делается?
kami (2005-09-16 16:10:00) [1]//автор - Набережных С. ©
function ExecuteOnSession(SessionID: DWORD; const AppName: string): THandle;
var
H: THandle;
SI: TStartupInfo;
PI: TProcessInformation;
begin
Result:=0;
if not WTSQueryUserToken(SessionID, H) then Exit;
try
FillChar(SI, SizeOf(SI), 0);
SI.cb:=SizeOf(SI);
if CreateProcessAsUser(H, nil, @AppName[1], nil, nil, false,
CREATE_NEW_CONSOLE, nil, nil, SI, PI) then
begin
CloseHandle(PI.hThread);
Result:=PI.hProcess;
end;
finally
CloseHandle(H);
end;
end;
function ExecuteAsIU_XP(const AppName: string): THandle;
var
SessionID: DWORD;
begin
SessionID:=WTSGetActiveConsoleSessionId;
Result:=ExecuteOnSession(SessionID, AppName);
end;
ЗЫ. Проверено автором на XP SP2
chili (2005-09-16 14:39:00) [2]Можно еще пробовать запускать через AT с ключем /INTERACTIVE
правде не факт, что будет запущена служба расписаний...
chili (2005-09-16 14:37:00) [3]Still Swamp (16.09.05 13:51)
function CreateProcessWithLogonW(
lpUsername,
lpDomain,
lpPassword:PWideChar;
dwLogonFlags:dword;
lpApplicationName: PWideChar;
lpCommandLine: PWideChar;
dwCreationFlags: DWORD;
lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar;
const lpStartupInfo: tSTARTUPINFO;
var lpProcessInformation: TProcessInformation ): BOOL; stdcall; external 'advapi32.dll';
wUsername := 'admin';
wDomain := '';
wPassword := 'test';
wApplicationName := 'calc.exe';
pwUsername := Addr(wUsername[1]);
pwDomain := Addr(wDomain[1]);
pwPassword := Addr(wPassword[1]);
pwApplicationName := Addr(wApplicationName[1]);
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
StartupInfo.cb := SizeOf(TStartupInfo);
CreateProcessWithLogonW(pwUsername,pwDomain,pwPassword,LOGON_WITH_PROFILE,
pwApplicationName,nil,CREATE_DEFAULT_ERROR_MODE,
nil,nil,StartupInfo,ProcessInfo);
BiN (2005-09-16 14:28:00) [4]Зачем делать дыру в защите?