Suspend/Resume process.

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Nayres

Membre Banni
Apr 15, 2012
3,431
0
341
Quelque part.
Bonjour, aujourd'hui je compte vous apprendre à créer une console, qui va suspendre un process, ainsi que le résumer, bonne lecture.


Suspendre un process

Je vais utiliser Typedef pour faciliter mon code au plus possible
PHP:
#include <windows.h>
#include <tlhelp32.h>
typedef DWORD(NTAPI *_ZwSuspendProcess)(HANDLE hProcess);

Je définis la fonction pour avoir le PID d'un process

PHP:
DWORD GetPidByName(char* szProcess)
{
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 PE;
    PE.dwSize = sizeof(PE) ;
    Process32First(hSnap, &PE);

    while (Process32Next(hSnap, &PE))
    {
        char Converted[100] = "\0";
        wcstombs(Converted, PE.szExeFile, sizeof(Converted));
        if (strcmp(Converted, szProcess) == 0)
        {
            return PE.th32ProcessID;
        }
    }
    return 0;
}


Maintenant notre fonction principal

PHP:
int main(int argc, CHAR* argv[])
{
      SetConsoleTitleA("Tutoriel pour suspendre un process");
      DWORD PID = GetPidByName("Process.exe"); /Modifiez Process.exe par le nom de votre process
          if (PID == 0)
    {
        system("PAUSE");
        return 0;
    }
          else
    {
        _ZwSuspendProcess ZwSuspendProcess = (_ZwSuspendProcess)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwSuspendProcess");
		HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
        ZwSuspendProcess(hProc);
     
	}
}


Resumer un process

On refait le même code en remplaçant Suspend par Resume

PHP:
#include <windows.h>
#include <tlhelp32.h>
typedef DWORD(NTAPI *_ZwResumeProcess)(HANDLE hProcess);

DWORD GetPidByName(char* szProcess)
{
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 PE;
    PE.dwSize = sizeof(PE) ;
    Process32First(hSnap, &PE);

    while (Process32Next(hSnap, &PE))
    {
        char Converted[100] = "\0";
        wcstombs(Converted, PE.szExeFile, sizeof(Converted));
        if (strcmp(Converted, szProcess) == 0)
        {
            return PE.th32ProcessID;
        }
    }
    return 0;
}


int main(int argc, CHAR* argv[])
{
	SetConsoleTitleA("Tutoriel pour suspendre un process");
	DWORD PID = GetPidByName("Process.exe");
	if (PID == 0)
	{
		system("PAUSE");
		return 0;
	}
	else
	{
        _ZwResumeProcess ZwResumeProcess = (_ZwResumeProcess)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwResumeProcess");
		HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
        ZwResumeProcess(hProc);
	}
}
 

Attachments

  • Suspend & Resume.rar
    1.2 KB · Views: 13
Last edited:

Takoo

Membre Banni
Feb 20, 2011
1,832
3
463
29
Paris SG :3
Merci,
1377635282-sans-titre.png

Grâce à toi.
En rajoutant quelques boutons de mes connaissances ..
Il me manquait juste la fonction Resume et Suspend.
 
Last edited:
Mar 30, 2011
1,014
1
944
In Your Ass
elles existe via autoit aussi Scounatrix

Code:
Func _ProcessSuspend($process)
$processid = ProcessExists($process)
If $processid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
    $i_sucess = DllCall("ntdll.dll","int","NtSuspendProcess","int",$ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then 
        Return 1
    Else
        SetError(1)
        Return 0
    Endif
Else
    SetError(2)
    Return 0
Endif
EndFunc

Func _ProcessResume($process)
$processid = ProcessExists($process)
If $processid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
    $i_sucess = DllCall("ntdll.dll","int","NtResumeProcess","int",$ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then 
        Return 1
    Else
        SetError(1)
        Return 0
    Endif
Else
    SetError(2)
    Return 0
Endif
End