Форум: "Система";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
ВнизУказатель на 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c