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

Вниз

KillSelf   Найти похожие ветки 

 
T2   (2001-12-14 03:22) [0]

Как заставить программу совершить самоубийство? Тока не при перезагрузке, а в риал-тайме!


 
KilkennyCat   (2001-12-14 04:12) [1]

Самоубийство - имеется ввиду удаление с винта?
Она просто должна жить в памяти, откуда спокойно себя стирает с винта, а потом говорит сама себе: close.


 
T2   (2001-12-14 04:32) [2]

Да, удаление с винта. Но удалять сама себя не хочет-грит файл заблокирован (очевидно она не вся в память залазит, а подгружается и держит ехе открытым) :(


 
KilkennyCat   (2001-12-14 04:37) [3]

Ну разумеется! Если не срочно, то я потом напишу как (сейчас занят), пока я только помню обрывки досовских вариантов из "битва в памяти".


 
T2   (2001-12-14 05:32) [4]

Ok, будет время, кинь на gu-gu-gu2@mtu-net.ru иль здесь напиши.


 
Milz   (2001-12-14 09:31) [5]

Не помню откуда откопал, завершает программу и удаляет её с винта.
Подскажите как это работает, конкретно меня интересуют как происходят вызовы апи, софтайс показал что тут не просто переход по адресу функции, а какие-то извращения в kernel32, а потом вызывается сама апи и так с каждой. что это и как передаются параметры?

uses
windows;

procedure DeleteSelf;
var hModule :THandle;
szModuleName:array[0..MAX_PATH] of char;
hKrnl32 : THandle;
pExitProcess, pDeleteFile, pFreeLibrary,pUnmapViewOfFile : pointer;
ExitCode :UINT;
begin
hModule:= GetModuleHandle(nil);
GetModuleFileName(hModule, szModuleName, sizeof(szModuleName));
hKrnl32 := GetModuleHandle ( "kernel32" );
pExitProcess := GetProcAddress ( hKrnl32, "ExitProcess" );
pDeleteFile := GetProcAddress ( hKrnl32, "DeleteFileA" );
pFreeLibrary := GetProcAddress ( hKrnl32, "FreeLibrary" );
pUnmapViewOfFile := GetProcAddress ( hKrnl32, "UnmapViewOfFile" );
ExitCode := system.ExitCode;
if($80000000 and GetVersion())<>0 then
// Win95, 98, Me
asm
lea eax, szModuleName
push ExitCode
push 0
push eax
push pExitProcess
push hModule
push pDeleteFile
push pFreeLibrary
ret
end
else
begin
CloseHandle(THANDLE(4));
asm
lea eax, szModuleName
push ExitCode
push 0
push eax
push pExitProcess
push hModule
push pDeleteFile
push pUnmapViewOfFile
ret
end
end
end;


 
Andrey   (2001-12-14 10:34) [6]

Господа, Зачем столько хитростей,:) обратитесь в FAQ-у http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988621694&n=15


 
paul_shmakov   (2001-12-15 01:14) [7]

2 Andrey:
FAQ не прав. а вот Milz дал правильное решение. здесь в форуме WinApi мы это решение подробно рассматривали.


 
А вот   (2001-12-15 01:41) [8]

насчет "правильности" - надобно посоветоваться с Digitman. Он по-моему этим заинтересовался и копал глубже. Если имхо он захочет поделиться. В чем лично я сомневаюсь, поскольку тема "скользкая".


 
paul_shmakov   (2001-12-16 02:13) [9]

2 А вот:
:) ну а если Digitman не захочет поделиться, то я поделюсь.

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1004956210&n=5

см. ссылку, ну очень подробно для winnt/2k



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
1-22017
Builder
2001-12-17 19:45
2002.01.08
Как ставить свою строку в текущий едит?


14-22357
Виктор Щербаков
2001-11-01 12:40
2002.01.08
Восстановление фотографий


3-21926
Oleon
2001-12-04 15:14
2002.01.08
Создание таблицы из Delphi.


1-22115
DerZky
2001-12-19 18:14
2002.01.08
Как сравнить даты и разницу между ними получить Integer


1-22158
Praco
2001-12-20 16:29
2002.01.08
TCustomGrid и все его потомки...