[SOURCE] Native Api - NtSuspendProcess/NtResumeProcess

Iniciado por seba123neo, 21 Octubre 2009, 02:38 AM

0 Miembros y 1 Visitante están viendo este tema.

seba123neo

Hola, este es un ejemplo de estas 2 api's nativas de NTDLL.DLL, la api NtSuspendProcess sirve como dice la palabra para suspender un proceso, es como si lo dejaria trabado, y la otra NtResumeProcess sirve para liberarlo y reestablecerlo a la normalidad, es muy facil el funcionamiento no hay mucha vuelta de tuerca, simplemente se les pasa el handle del proceso abierto con OpenProcess y listo.aca en el ejemplo el PID que usa OpenProcess esta fijo, o sea al PID del proceso que quieran usar como ejempo lo van a tener que averiguar ustedes  :P, lo hago asi para no ensuciar el codigo fuente, ya que para obtener el PID hay millones de paginas para ver como hacerlo y por eso se los dejo a ustedes.supongamos entonces que nuestro PID es el 1384 y supongamos pertenece a la calculadora de windows.

Código (vb) [Seleccionar]
'****************************************************************
' Procedure : SuspendProcess
' Author    : seba123neo
' Date      : 20/10/2009
' Purpose   : Suspend/Resume Process
'****************************************************************

Option Explicit

'NTDLL.DLL
Private Declare Function NtSuspendProcess Lib "ntdll.dll" (ByVal hProc As Long) As Long
Private Declare Function NtResumeProcess Lib "ntdll.dll" (ByVal hProc As Long) As Long

Private Enum TYPESUSPEND
   Suspend = 0
   Release = 1
End Enum

Private Const SYNCHRONIZE = &H100000
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)

Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Sub Command1_Click()
   Call SuspendProcess(1384, Suspend)
End Sub

Private Sub Command2_Click()
   Call SuspendProcess(1384, Release)
End Sub

Private Sub SuspendProcess(ByVal pPID As Long, ByVal pTypeSuspend As TYPESUSPEND)
   Dim vHandle As Long
   vHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pPID)
   If vHandle <> 0 Then
       Select Case pTypeSuspend
           Case 0: NtSuspendProcess vHandle
           Case 1: NtResumeProcess vHandle
       End Select
   End If
   CloseHandle vHandle
End Sub


saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

LeandroA

Muy bueno Seba ;-), le corta todo los hilos al proceso.

Saludos