Autor
|
Tema: Terminate Process XP (Leído 1,649 veces)
|
Ch3ck
Desconectado
Mensajes: 337
Elite
|
Holas, es que sabia como terminar un proceso en 98 con las APIs OpenProcess y TerminateProcess, pero cuando fui a un pc con xp ya no me funcionaba, quisiera saber con que APIs se puede hacer esto en xp. De antemano gracias por responder...
|
|
|
En línea
|
|
|
|
dPix
Desconectado
Mensajes: 222
¬_¬ - ¬O.o
|
Hola Ch3ckM4t3r, pues a ver, en el Form (donde quieras) pones: KillProcessus "Aquí el proceso a matar" Y en un módulo a parte: Option Explicit Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Private Type LUID LowPart As Long HighPart As Long End Type
Private Type LUID_AND_ATTRIBUTES pLuid As LUID Attributes As Long End Type
Private Type TOKEN_PRIVILEGES PrivilegeCount As Long TheLuid As LUID Attributes As Long End Type
Public Const MAX_PATH As Integer = 260 Public Const TH32CS_SNAPPROCESS As Long = 2&
Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szexeFile As String * MAX_PATH End Type
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Function ProcessTerminate(Optional lProcessID As Long, Optional lHwndWindow As Long) As Boolean Dim lhwndProcess As Long Dim lExitCode As Long Dim lRetVal As Long Dim lhThisProc As Long Dim lhTokenHandle As Long Dim tLuid As LUID Dim tTokenPriv As TOKEN_PRIVILEGES, tTokenPrivNew As TOKEN_PRIVILEGES Dim lBufferNeeded As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF, PROCESS_TERMINAT = &H1 Const ANYSIZE_ARRAY = 1, TOKEN_ADJUST_PRIVILEGES = &H20 Const TOKEN_QUERY = &H8, SE_DEBUG_NAME As String = "SeDebugPrivilege" Const SE_PRIVILEGE_ENABLED = &H2
On Error Resume Next If lHwndWindow Then lRetVal = GetWindowThreadProcessId(lHwndWindow, lProcessID) End If
If lProcessID Then lhThisProc = GetCurrentProcess
OpenProcessToken lhThisProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, lhTokenHandle LookupPrivilegeValue "", SE_DEBUG_NAME, tLuid tTokenPriv.PrivilegeCount = 1 tTokenPriv.TheLuid = tLuid tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED AdjustTokenPrivileges lhTokenHandle, False, tTokenPriv, Len(tTokenPrivNew), tTokenPrivNew, lBufferNeeded
lhwndProcess = OpenProcess(PROCESS_TERMINAT, 0, lProcessID)
If lhwndProcess Then ProcessTerminate = CBool(TerminateProcess(lhwndProcess, lExitCode)) Call CloseHandle(lhwndProcess) End If End If On Error GoTo 0 End Function
Public Function KillProcessus(nom_process) As String Dim i As Integer Dim hSnapshot As Long Dim uProcess As PROCESSENTRY32 Dim r As Long Dim nom(1 To 100) Dim num(1 To 100) Dim nr As Integer nr = 0 hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&) If hSnapshot = 0 Then Exit Function uProcess.dwSize = Len(uProcess) r = ProcessFirst(hSnapshot, uProcess) Do While r nr = nr + 1 nom(nr) = uProcess.szexeFile num(nr) = uProcess.th32ProcessID r = ProcessNext(hSnapshot, uProcess) Loop For i = 1 To nr If InStr(UCase(nom(i)), UCase(nom_process)) <> 0 Then ProcessTerminate (num(i)) Exit For End If Next i End Function
Yo tenía este que me cogí hace tiempo y que he utilizado un par de veces, ahora estoy investigando a ver como hacerlo más corto, espero que te haya servido. Salu2, dPix
|
|
|
En línea
|
|
|
|
Ch3ck
Desconectado
Mensajes: 337
Elite
|
Ok gracias.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ERROR - Process Hollowing
Programación C/C++
|
ThunderCls
|
2
|
2,367
|
16 Agosto 2011, 20:28 pm
por Karman
|
|
|
Process returned 0
Programación C/C++
|
m@o_614
|
6
|
3,549
|
21 Enero 2014, 04:06 am
por m@o_614
|
|
|
No se visualizan eventos en Process Monitor
Windows
|
d3xf4ult
|
0
|
1,631
|
6 Octubre 2014, 10:49 am
por d3xf4ult
|
|
|
Process interruptions n/a
Programación C/C++
|
@XSStringManolo
|
0
|
1,282
|
3 Junio 2019, 19:43 pm
por @XSStringManolo
|
|
|
Process returned -1073741819
Programación C/C++
|
cyelph
|
4
|
2,935
|
31 Mayo 2020, 16:23 pm
por cyelph
|
|