Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Указатель на 16-разрядный процесс [Win95/98, Win2k]


Demon ©   (2003-03-11 18:11:00) 

Как получить указатель на 16-разрядный процесс?


Burmistroff   (2003-03-11 21:01:00) [1]

А в 98 разве есть какие-то особые правила для 16 битных (я честно говоря ни когда над этим не задумывался ;) ) но про NT - скажу - убивать ntvdm несколько не спортивно, хотя и действенно. По хорошему, надо получить его PID, а затем использовать ф-ции vdmdbg:

function AppKill(PID, VDM: cardinal):boolean; //Убивает процесс. Если процесс 16-разрядный, то VDM должен быть PID"ом NTVDM.EXE иначе, VDM = 0
type TVDMTerm= function(VDM_, PID_: dword): boolean; stdcall;
var
hInstLib2, ProcHand: thandle;
FuncPtr: pointer;
r: boolean;
VDMTerm: TVDMTerm;
begin
r:=false;
if pid>0 then
try
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
EnablePrivilege("SeSystemEnvironmentPrivilege");
EnablePrivilege("SeDebugPrivilege");
end;
if vdm=0 then
begin
ProcHand := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
if (ProcHand>0)and(terminateprocess(ProcHand,0)) then r:=true else r:=false;
CloseHandle(ProcHand);
end else
begin
try
hInstLib2:=LoadLibraryA("VDMDBG.DLL");
FuncPtr:=GetProcAddress(hInstLib2,"VDMTerminateTaskWOW");
if FuncPtr<>nil then
begin
@VDMTerm:=FuncPtr;
r:=VDMTerm(VDM, PID);
FuncPtr:=nil;
end;
finally
FreeLibrary(hInstLib2);
end;
end;
except r:=false end;

result:=r;
end;


Demon   (2003-03-11 18:31:00) [2]

> Игорь Шевченко

!!! Спасибо! :) А для 98-й как? Просто у меня сейчас только 2000-к, а надо будет.


Игорь Шевченко   (2003-03-11 18:25:00) [3]

Demon © (11.03.03 18:20)
> В данном случае это то, что ты можешь увидать в Task manager
>


В task manager виден процесс NTVDM. Вот его, очевидно, и надо убивать при подвисаниях :-)))


Demon   (2003-03-11 18:20:00) [4]

В данном случае это то, что ты можешь увидать в Task manager :), извиняюсь за неточную формулировку. Смысл: современная прога тянет пару 16-тиразрядных exe-шников (начальство никак не желает понять, что это проще переделать). Ну они и подвисают временами. Необходимо в этом случае грохнуть этот процесс (типа TerminateProcess)...


MBo   (2003-03-11 18:15:00) [5]

А что такое указатель на процесс????


Наверх

Титульная страница Поиск, карта сайта Написать письмо