Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zatrzymanie wątków


VereX.

Rekomendowane odpowiedzi

Opublikowano

Mój problem pewnie jest prosty do rozwiązania, no ale mam problem.

Z pomocą pewnej osoby udało mi się napisać program, który po nazwie znajduje proces, następnie funkcja

 

DWORD GetMainThreadId(DWORD ownerID)
{
    THREADENTRY32 te;
    HANDLE Snapshot;

    Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
    te.dwSize = sizeof(THREADENTRY32);

    if(Snapshot != INVALID_HANDLE_VALUE)
    {
        if(Thread32First(Snapshot, &te))
        {
            do
            {
                if(ownerID == te.th32OwnerProcessID)
                {
                    return te.th32ThreadID;
                }
            }
            while(Thread32Next(Snapshot, &te));
        }

        CloseHandle(Snapshot);
    }

    return 0;
}

Znajduje mainThread, no wszystko ładnie. Kalkulator się zaciął, CS:GO też, ale za to gra na której próbuje to zrobić nie...

Niby zatrzymało, niby się powiodło, ale menu chodzi, wszystko działa. Nagle wchodze w mecz i zatrzymało sie. W teorii korzystając z Speedhacka ustawionego na 0 w CE, po 5-10s wywalalo nas za brak synchronizacji z przeciwnikiem. Jednak w tym programie potrafie nawet zatrzymać na 10min, a przeciwnik nie wzruszony, po długim lagu nadal sobie gra...

Więc, chciałbym spytać jak uzyskać ID wszystkich watkow procesu, aby je zatrzymac naraz wszystkie.

TuByłaSygnatura.png

Opublikowano

Kod który ci dałem freezuje tylko 'główny' wątek, ale mogą być od tego wyjątki...

Spróbuj przerobić ten kod na taki który wszystkie wątki programu wrzuci do tablicy a potem będzie je freezował. Przy odmrażaniu będziesz miał gotową tablicę.

846331404756772371599.jpeg
Opublikowano
std::vector<DWORD> GetMainThreadId(DWORD ownerID)
{
    THREADENTRY32 te;
    HANDLE Snapshot;
    std::vector<DWORD> threads;
    Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
    te.dwSize = sizeof(THREADENTRY32);

    if(Snapshot != INVALID_HANDLE_VALUE)
    {
        if(Thread32First(Snapshot, &te))
        {
            do
            {
                if(ownerID == te.th32OwnerProcessID)
                {
                    threads.push_back(te.th32ThreadID);
                }
            }
            while(Thread32Next(Snapshot, &te));
        }

        CloseHandle(Snapshot);
    }

    return threads;
}

+/- tak

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

  • 2 tygodnie później...
Opublikowano

Pomyślałem, że znajdę adresy wszystkich wątków w procesie.

Zrobiłem funkcję, która wypisuje mi wszystkie adresy.

I tutaj mam pytanie, czy jest sens tworzenia tablicy.

Do tej tablicy walnąć te adresy i otwierać te ok 65 wątków i ich zatrzymanie?

Ma to sens?

TuByłaSygnatura.png

Opublikowano

A po co Ci adresy wątków? Poza tym jakie dokładnie adresy zbierasz? Adres stosu, punktu wejścia czy jeszcze inne?

Wg tego kawałka kodu ciężko cokolwiek wywnioskować, bo nie widać tu tego wektora i jego użycia.

YOU MUST DIE

- Ganon, Koridai

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...