Jak zabić określony wątek w systemie Windows?

1

Proces explorer.exe ma wątek z „adresem początkowym” rozpoczynającym się od „windows.immersiveshell.serviceprovider.dll”. Wymaga dużej mocy obliczeniowej. Dodatkowo po przebudzeniu wytwarza trzy okna klasy „MetroGhostWindow”, które mają miejsce w oknie dialogowym Alt + Tab.

Zabicie wątku za pomocą Process Hackera działa doskonale i uwalnia zasoby. Ale czy istnieje takie samo narzędzie wiersza poleceń?

Anixx
źródło
Możesz łatwo stworzyć małą aplikację, która mogłaby być wywoływana z linii poleceń, po prostu poproś o argument i wywołaj funkcję TerminateThread .
Ramhound
@Ramhound Nie wiem jak to zrobić. Musi również uzyskać jako argument podłańcuch nazwy punktu wejścia zamiast TID. PS Dlaczego głosowanie negatywne? To nie jest strona programistyczna, prawda?
Anixx
Jeśli chcesz mieć taką możliwość, dowiesz się, jak to zrobić. Problem z funkcją, którą podałem, jest taki, że wymaga uchwytu do wątku. Lepiej jest po prostu zakończyć proces, do którego należy wątek, o wiele łatwiej, niż próbować uzyskać uchwyt wątku w aplikacji, która już działa. Kiedy ostatni raz sprawdzałem, głosowanie jest niepomyślne , jestem zszokowany, że dają możliwość, aby zobaczyć historię głosowania na pytanie dla nowych użytkowników.
Ramhound
To, czego chcesz, wymaga napisania małej aplikacji konsoli poleceń lub przynajmniej skryptu Powershell.
Ramhound
2
lepiej przeanalizuj, co robi wątek, zamiast go zabijać. udostępnij ślad WPR, abym mógł Ci powiedzieć, co robi. Zainstaluj WPT (część pakietu Win10 SDK: dev.windows.com/en-us/downloads/windows-10-sdk, który działa również w wersji 8.1), uruchom WPRUI.exe, wybierz „Pierwszy poziom”, w sekcji Zasoby wybierz użycie procesora i kliknij przycisk Start . Teraz przechwyć 1 minutę użycia procesora. Po 1 minucie kliknij Zapisz . Spakuj duży plik ETL (folder + NGENPDB) do 1 zip, prześlij zip (OneDrive, Dropbox, dysk Google) i opublikuj link udostępniania tutaj.
magicandre1981

Odpowiedzi:

1

Cóż, ten skrypt VBS robi to za mnie.

Umieść skrót do folderu autostartu. Umieść w tym samym folderze, co ten skrypt narzędzia nopey i processhacker.

Set objShell = CreateObject("WScript.Shell")
Set objWshScriptExec = objShell.Exec("nopey.exe list threads Explorer.exe")
Set objStdOut = objWshScriptExec.StdOut

Do 
strLine = objStdOut.ReadLine
pos=Instr(strLine, "00000000")
If pos<>0 And Op=0 Then Exit Do
Op=Instr(strline, "TID")
Loop

Tid=CLng("&H" & (Mid(strLine, 4,4)))

'WScript.Echo Tid

objShell.Run "ProcessHacker.exe -c -ctype thread -cobject " & Tid & " -caction terminate", 0

Wyłącza także wszystkie rzeczy Metro do ponownego uruchomienia Explorer.

PS Oto archiwum zip ze wszystkimi niezbędnymi rzeczami. Po prostu rozpakuj i uruchom.

http://www.eightforums.com/attachments/customization/67840d1462474574-there-way-disable-metro-interface-metrokill.zip

Anixx
źródło
jeszcze raz podziel się śladem, abym mógł powiedzieć ci, co robi wątek, zamiast po prostu go zabić.
magicandre1981
Jeśli ten skrypt działa dla Ciebie, masz dużo szczęścia. Nie ma linku między znalezionym wątkiem a windows.immersiveshell.serviceprovider.dll: Nie użyłbym go (zwłaszcza nie przy uruchamianiu), chyba że mógłbym ustanowić ten link, a ja jeszcze nie znalazłem narzędzia wiersza poleceń, które to robi. Po złożeniu zamówienia na mojej ProcessHackeraukcji znajduje on zupełnie inny wątek.
AFH
@AFH masz rację, to złe rozwiązanie, ale nie mam lepszego.
Anixx
0

Możesz utworzyć argument wiersza poleceń dla PH (Process Hacker).

Możesz to zrobić ProcessHacker.exe -c -ctype thread -cobject 1424 -caction terminate

Identyfikator można uzyskać za pomocą Eksploratora procesów, aby znaleźć identyfikator TID (identyfikator wątku) wątku, który chcesz zakończyć. Aby to zrobić, kliknij prawym przyciskiem myszy opcję Proces> Właściwości, a zobaczysz wątek, który chcesz zakończyć.

Przykład dla mnie to TID 7924

Pokazuje TID wątku, który chcesz zakończyć

Ugryziony Fleax
źródło
Proszę o narzędzie wiersza polecenia, które kończyłoby wątek przez podłańcuch „adresu początkowego”, który byłby uruchamiany przy każdym uruchomieniu komputera. Bez użycia GUI. Zakończenie wątku za pomocą GUI jest możliwe dzięki Process Hacker, jak już wspomniałem w pytaniu. Ta odpowiedź po prostu powtarza informacje zawarte w moim pytaniu.
Anixx
Z wyjątkiem tej odpowiedzi można użyć z poziomu skryptu lub wiersza polecenia.
Ramhound
@Ramhound nie może. Wymaga uruchomienia Process Explorer w GUI, aby uzyskać TID. Również bierze wszystkie informacje z mojego komentarza do pytania, z linku, który już podałem
Anixx
1
Ach, rozumiem cię. Jestem pewien, że Powershell może uzyskać TID procesu. Po prostu filtruje według nazwy procesu. Spojrzę i zobaczę.
Ugryziony Fleax
@Bitten Fleax, ale czy pozwoli uzyskać identyfikator TID z adresu początkowego?
Anixx