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

Вниз

Указатель на 16-разрядный процесс   Найти похожие ветки 

 
Demon ©   (2003-03-11 18:11) [0]

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


 
MBo ©   (2003-03-11 18:15) [1]

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


 
Demon ©   (2003-03-11 18:20) [2]

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


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

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


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


 
Demon ©   (2003-03-11 18:31) [4]

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

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


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

А в 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;



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
1-91246
paxer
2003-04-15 17:45
2003.04.28
Как в переменной типа vaiant сохранить Pointer?


6-91433
Serhij H.
2003-03-03 12:50
2003.04.28
Delete Cookie&Cache


3-91234
Lony
2003-04-10 19:29
2003.04.28
Надо выбрать базу данных.


14-91461
Почтальён Печкин
2003-04-09 13:09
2003.04.28
Письмо счастья


14-91501
Иван Шихалев
2003-04-10 13:18
2003.04.28
Чиста про творчество :)