UnrealSkill-VIP
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[Source] Suspende e Resume Thread's + Video

Ir em baixo

[Source] Suspende e Resume Thread's + Video Empty [Source] Suspende e Resume Thread's + Video

Mensagem por uNreal 11/7/2020, 01:29



Funções Usadas:
Código:
CreateToolhelp32Snapshot
ZeroMemory
Process32First
wcstombs
CloseHandle
Process32Next
Thread32First
Thread32Next
SuspendThread
ResumeThread
GetAsyncKeyState
printf_s

Código:
#include <Windows.h>
#include <iostream>
#include <TlHelp32.h>

using namespace std;

#pragma warning(disable:4996)

int GetPID(char* Process_Name)
{
   HANDLE hAndle;
   PROCESSENTRY32 pEntry32;
   hAndle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
   ZeroMemory(&pEntry32, sizeof(PROCESSENTRY32));
   pEntry32.dwSize = sizeof(PROCESSENTRY32);
   Process32First(hAndle, &pEntry32);
   char Name[40] = "";
   do {
      wcstombs(Name, pEntry32.szExeFile, 40);      
      if (!strcmp(Name, Process_Name))
      {
         CloseHandle(hAndle);
         return pEntry32.th32ProcessID;
      }

   } while (Process32Next(hAndle, &pEntry32));
   CloseHandle(hAndle);
   return 0;
}

int ThreadID(int PID,int *TIDs) // Retorna o número thread's
{
   HANDLE hAndle;
   THREADENTRY32 tEntry32;
   hAndle = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
   ZeroMemory(&tEntry32, sizeof(THREADENTRY32));
   tEntry32.dwSize = sizeof(THREADENTRY32);
   Thread32First(hAndle, &tEntry32);
   int i = 0;
   for (; Thread32Next(hAndle, &tEntry32);)
   {
      if (tEntry32.th32OwnerProcessID == PID)
      {
         if (TIDs != NULL)
         {
            TIDs[i] = tEntry32.th32ThreadID;
         }
            i++;
      }
   }   
   CloseHandle(hAndle);
   return i;
}

int sSuspendThread(int * TIDs, int Numero_de_Threads)
{
   for (int i = 0; i <= Numero_de_Threads; i++)
   {      
      SuspendThread(OpenThread(THREAD_ALL_ACCESS, FALSE, TIDs[i]));
   }
   return 1;
}

int sResumeThread(int * TIDs, int Numero_de_Threads)
{
   for (int i = 0; i <= Numero_de_Threads; i++)
   {
      ResumeThread(OpenThread(THREAD_ALL_ACCESS, FALSE, TIDs[i]));
   }
   return 1;
}

int main()
{   
   int TIDs[60];
   int Length = ThreadID(GetPID("ProcessHacker.exe"), TIDs);
   bool OnOff = false;
   printf_s("Nome do processo: ProcessHacker.exe PID: %i Numero de Threads: %i \n", GetPID("ProcessHacker.exe"), ThreadID(GetPID("ProcessHacker.exe"), NULL));
   while (true)
   {
      if (GetAsyncKeyState(VK_CONTROL) && OnOff == false)
      {
         Sleep(250);
         sSuspendThread(TIDs, Length);
         OnOff = !OnOff;
         cout << "Threads pausadas!" << endl;
      }

      if (GetAsyncKeyState(VK_CONTROL) && OnOff == true)
      {
         Sleep(250);
         sResumeThread(TIDs, Length);
         OnOff = !OnOff;
         cout << "Threads resumidas!" << endl;
      }
   }

   system("pause");
   return 0;
}

Crédito: Dcan
uNreal
uNreal
ADM
ADM


Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão neste fórum:
Você não pode responder aos tópicos neste fórum