;by regx
format pe console
entry main
include 'c:\fasm\include\win32ax.inc'
.data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
struct PROCESSENTRY32
dwSize dd ?
cntUsage dd ?
th32ProcessID dd ?
th32DefaultHeapID dd ?
th32ModuleID dd ?
cntThreads dd ?
th32ParentProcessID dd ?
pcPriClassBase dd ?
dwFlags dd ?
szExeFile rb MAX_PATH
ends
pInfo PROCESSENTRY32
hProcess dd ?
hProcesses dd ?
TH32CS_SNAPPROCESS equ 0x00000002
NORM_IGNORECASE equ 0x00000001
LOCALE_USER_DEFAULT equ 0x0400
CSTR_EQUAL equ 0x2
PROCESS_TERMINATE equ 0x0001
lpExe db 256 dup(0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
main:
invoke printf,"Escriba el proceso a terminar: "
invoke scanf,"%s",lpExe
push 0
push TH32CS_SNAPPROCESS
call [CreateToolhelp32Snapshot]
cmp eax,INVALID_HANDLE_VALUE
jne NoE1
push 1
call ErrorReport
jmp main@Salir
NoE1:
mov [hProcesses],eax
mov eax,sizeof.PROCESSENTRY32
mov [pInfo.dwSize], eax
push pInfo
push [hProcesses]
call [Process32First]
cmp eax,FALSE
jne NoE2
push 2
call ErrorReport
jmp main@Salir
NoE2:
bucle1:
push 0xFFFFFFFF
push lpExe
push 0xFFFFFFFF
push pInfo.szExeFile
push NORM_IGNORECASE
push LOCALE_USER_DEFAULT
call [CompareString]
cmp eax,CSTR_EQUAL
jne Next
push [pInfo.th32ProcessID]
push FALSE
push PROCESS_TERMINATE
call [OpenProcess]
cmp eax,0
je Next
mov [hProcess],eax
push 0
push [hProcess]
call [TerminateProcess]
push [hProcess]
call [CloseHandle]
Next:
push pInfo
push [hProcesses]
call [Process32Next]
cmp eax,FALSE
je FinBucle1
jmp bucle1
FinBucle1:
push [hProcesses]
call [CloseHandle]
main@Salir:
leave
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,
proc ErrorReport,raz
call [GetLastError]
cmp [raz],1
je @0
cmp [raz],2
je @1
cmp [raz],3
je @2
jmp @def
@0:
invoke printf,"Error Handle Invalido code %d ",eax
jmp Error@Salir
@1:
invoke printf,"Error cannot open the process ",eax
jmp Error@Salir
@2:
jmp Error@Salir
@def:
invoke printf,"Error desconocido code %d ",eax
Error@Salir:
call [GetLastError]
invoke printf,"%d",eax
leave
ret
endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
section '.idata' import data readable
library k32,'kernel32.dll',msv,'msvcrt.dll'
import k32,CreateToolhelp32Snapshot,'CreateToolhelp32Snapshot',\
GetLastError,'GetLastError',Process32First,'Process32First',\
CompareString,'CompareStringA', OpenProcess,'OpenProcess',\
TerminateProcess,'TerminateProcess', \
CloseHandle,'CloseHandle',Process32Next,'Process32Next'
import msv,printf,'printf',scanf,'scanf'