Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.24;
Скачать: CL | DM;

Вниз

Как не дать запустить моё приложение из другова приложения ?   Найти похожие ветки 

 
OlegM   (2011-04-15 11:34) [0]

Здрассте.
Нужно в программе как-то отсделедить что-бы она не запускалась из другой программы типа функциями ShellExecute или CreateProcess или мб еще каким способом


 
KilkennyCat ©   (2011-04-15 11:47) [1]

между прочим, запуск ее "стандарным способом" подразумевает, что она запустилась из-под программы explorer.exe....


 
Ega23 ©   (2011-04-15 11:50) [2]


>  что-бы она не запускалась из другой программы типа функциями
> ShellExecute или CreateProcess или мб еще каким способом


То, что explorer, Total Commander и т.п. используют CreateProcess для запуска твоей программы из своей оболочки - это тебя не напрягает?


 
OlegM   (2011-04-15 11:51) [3]

ну перефразирую , скажем есть определенная программа, не дать из под нее запустит


 
KilkennyCat ©   (2011-04-15 11:51) [4]

GetStartupInfo ?


 
clickmaker ©   (2011-04-15 11:53) [5]

> скажем есть определенная программа, не дать из под нее запустит

а зачем?


 
KilkennyCat ©   (2011-04-15 11:57) [6]


> clickmaker ©   (15.04.11 11:53) [5]

наверное, чтобы эта программа не убила бы заголовок и не встроила в себя.


 
OW ©   (2011-04-15 12:39) [7]


> есть определенная программа, не дать из под нее запустит

а если ее переименуют?


 
OlegM   (2011-04-15 12:50) [8]

есть прога которая в качестве доп. функций запускает мою прогу из под себя
и получается видимость это это все сделано в одной проге.


 
OW ©   (2011-04-15 12:57) [9]

можно попробовать
поискать класс окна той проги, если найдено, определить idprocess, если парент процесс тебя = ему, значит покричать, что вся слава принадлежит не тому автору, а гению OlegM :)


 
Rouse_ ©   (2011-04-15 13:17) [10]

Запускай себя из самого себя. Т.е. при запуске проверяй, если ParentID <> тебе самому, стартуй себя и завершайся.


 
OlegM   (2011-04-15 13:18) [11]

2 OW ненадо иронизировать)), внутренние войны на предприятии )


 
OW ©   (2011-04-15 13:23) [12]


> Rouse_ ©   (15.04.11 13:17) [10]
> Т.е. при запуске проверяй, если ParentID <> тебе самому,
>  стартуй себя и завершайся.

не понял..
все равно же запуск произойдет


 
OlegM   (2011-04-15 13:28) [13]

2 Rouse_  можно поподробней ?


 
clickmaker ©   (2011-04-15 13:30) [14]

> если ParentID <> тебе самому, стартуй себя и

завершай ParentID )


 
OW ©   (2011-04-15 13:30) [15]


> поискать класс окна той проги, если найдено, определить
> idprocess, если парент процесс тебя = ему,

т.е. наоборот, взять id родителя, проверить того ли класса его окно.


 
OlegM   (2011-04-15 13:47) [16]

спс бум рыть в эту сторону)


 
Rouse_ ©   (2011-04-15 14:14) [17]


> все равно же запуск произойдет

Произойдет, но теперь запускающий процесс не будет иметь валидного хэндла и пайпа на руках.


> OlegM   (15.04.11 13:28) [13]
> 2 Rouse_  можно поподробней ?

Щас пример накидаю.


 
Rouse_ ©   (2011-04-15 14:33) [18]

Ну вот как-то так:

program SimpleAntiDebugHintTrick;

{$APPTYPE CONSOLE}

uses
 Windows,
 TlHelp32,
 SysUtils;

type
 PROCESS_BASIC_INFORMATION = packed record
   ExitStatus: DWORD;
   PebBaseAddress: Pointer;
   AffinityMask: DWORD;
   BasePriority: DWORD;
   uUniqueProcessId: Ulong;
   uInheritedFromUniqueProcessId: Ulong;
 end;

function  NtQueryInformationProcess(
   ProcessHandle : THandle;
   ProcessInformationClass : Byte;
   ProcessInformation : Pointer;
   ProcessInformationLength : ULONG;
   ReturnLength : PULONG
 ): DWORD; stdcall; external "ntdll.dll";

const
 ProcessBasicInformation = 0;
var
 dwProcessHandle: DWORD;
 Info: PROCESS_BASIC_INFORMATION;
 Entry: TProcessEntry32;
 Module: TModuleEntry32;
 Snap1, Snap2: THandle;
 SI: TStartupInfo;
 PI: TProcessInformation;
begin
 try
   DuplicateHandle(GetCurrentProcess, GetCurrentProcess, GetCurrentProcess,
     @dwProcessHandle, 0, False, DUPLICATE_SAME_ACCESS);
   if NtQueryInformationProcess(dwProcessHandle,
     ProcessBasicInformation, @Info, SizeOf(Info), nil) = NO_ERROR then
   begin
     Snap1 := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     if Snap1 <> INVALID_HANDLE_VALUE then
     try
       Entry.dwSize := SizeOf(TProcessEntry32);
       if (Process32First(Snap1, Entry)) then
       repeat
         if Entry.th32ProcessID = Info.uInheritedFromUniqueProcessId then
         begin
           Snap2 := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, Entry.th32ProcessID);
           if Snap2 <> INVALID_HANDLE_VALUE then
           try
             Module.dwSize := SizeOf(TModuleEntry32);
             if Module32First(Snap2, Module) then
             begin
               if LowerCase(Module.szExePath) <> LowerCase(ParamStr(0)) then
               begin
                 SI.cb := SizeOf(TStartupInfo);
                 CreateProcess(PChar(ParamStr(0)), nil, nil, nil,
                   False, CREATE_DEFAULT_ERROR_MODE, nil,
                   PChar(ExtractFilePath(ParamStr(0))), SI, PI);
                 ExitProcess(ERROR_ACCESS_DENIED);
               end;
             end;
           finally
             CloseHandle(Snap2);
           end;
         end;
       until not Process32Next(Snap1, Entry);
     finally
       CloseHandle(Snap1);
     end;
   end;
 except
   on E:Exception do
     Writeln(E.Classname, ": ", E.Message);
 end;
 Writeln("Now parent process is empty.");
 Readln;
end.


 
Anatoly Podgoretsky ©   (2011-04-15 15:28) [19]

> OlegM  (15.04.2011 13:47:16)  [16]

И в ShellExecute


 
KSergey ©   (2011-04-18 14:44) [20]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2011.07.24;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.009 c
2-1302880220
loki3d
2011-04-15 19:10
2011.07.24
передача большого файла через Socket


15-1302258883
KilkennyCat
2011-04-08 14:34
2011.07.24
вопрос по ActionScript3


2-1302299560
TheEd
2011-04-09 01:52
2011.07.24
Ламерский вопрос про обновление списка lookup-поля


2-1302458216
Учусь
2011-04-10 21:56
2011.07.24
Ошибка при получение данных из dll


2-1303362776
petvv
2011-04-21 09:12
2011.07.24
Закончилась ли операция чтения записи