Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.008 c
3-91227
off
2003-04-08 12:52
2003.04.28
Количество пользователей и InterBase?


1-91313
ErikIvanov
2003-04-16 18:19
2003.04.28
Немогу понять куда девался interface!


1-91357
shurik
2003-04-15 21:30
2003.04.28
стиль ХР


4-91608
Colt
2003-02-25 09:08
2003.04.28
Убийство приложений


7-91577
Ifrit
2003-03-09 13:37
2003.04.28
Народ, помогите!!! Как определить установлен ли Word в системе?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский