Código
format pe console entry main include 'c:\fasm\include\win32ax.inc' .data ;Data begin--------------------------------------------------\ struct PROCESSENTRY32 ; dwSize dd ? ; cntUsage dd ? ; th32ProcessID dd ? ; th32DefaultHeapID dw ? ; 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) ; ;Data ends---------------------------------------------------/ .code ;Code Begins-------------------------------------------------\ main: ; invoke printf,"Escriba el proceso a terminar: " ; invoke scanf,"%s",addr lpExe ; xor eax,eax ; push eax ; push TH32CS_SNAPPROCESS ; call [CreateToolhelp32Snapshot] ; cmp eax,INVALID_HANDLE_VALUE ; jne NoE1 ; push 1 ; call ErrorReport ; jmp main@Salir ; NoE1: ; mov [hProcesses],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 ; ;Main Ends'''''''''''''''''''''''''''''''''''''''''''''''''''; ;ErrorReport Begins''''''''''''''''''''''''''''''''''''''''''; ; 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 ; ;ErrorReports ends'''''''''''''''''''''''''''''''''''''''''''; ;.code ends--------------------------------------------------/ 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'
saludos