Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.07.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.003 c
2-1302199698
Xalexo
2011-04-07 22:08
2011.07.24
Копирование файла по маске


15-1302120074
Игорь Шевченко
2011-04-07 00:01
2011.07.24
McSimm, с днем рождения!


15-1302035404
Юрий
2011-04-06 00:30
2011.07.24
С днем рождения ! 6 апреля 2011 среда


15-1302110786
Inovet
2011-04-06 21:26
2011.07.24
DMClient &amp; IE9


2-1302930981
mefodiy
2011-04-16 09:16
2011.07.24
Как отключить F12 в Delphi 2010





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский