Fremden Prozess anhalten



  • Ich denke in Standard C++ gibts vor mein Vorhaben keine Möglichkeit, drum hab ich das mal hier gepostet. Gibt es eine Möglichkeit, wie ich einen fremden Prozess anhalten kann und später wieder fortsetzen kann?



  • Main-Thread der Anwendung suspendieren

    greetz KN4CK3R



  • Hi,

    KN4CK3R schrieb:

    Main-Thread der Anwendung suspendieren

    greetz KN4CK3R

    aber was is dann mit den anderen Threads!? Die laufen doch dann einfach weiter. Is des ned schlecht!? War mir nicht ganz sicher ob das stimmt und hab mal schnell was geschrieben:

    #include <windows.h>
    #include <process.h>
    #include <stdio.h>
    
    DWORD g_dwMainThreadID;
    
    unsigned int __stdcall ThreadFunc(void* pVoid)
    {
    	BOOL bMainThreadSuspended = FALSE;
    	HANDLE hMainThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, g_dwMainThreadID);
    	int i = 0;
    
    	if(hMainThread != NULL)
    	{
    		if(SuspendThread(hMainThread) != (DWORD) -1)
    			bMainThreadSuspended = TRUE;
    
    		printf("form second thread: main thread supeneded: %i\n", bMainThreadSuspended);
    
    		for( i = 0; i < 10; i++)
    		{
    			printf("from second thread: round: %i\n", i);
    			Sleep(1000);
    		}
    
    		ResumeThread(hMainThread);
    		CloseHandle(hMainThread);
    	}
    	else
    		printf("couldnt open thread!\n");
    
    	return 0;
    }
    
    int main(int argc, char** argv)
    {
    	HANDLE hThread;
    	int i;
    
    	g_dwMainThreadID = GetCurrentThreadId();
    	printf("main thread id: %u\n", g_dwMainThreadID);
    	printf("start second thread....\n");
    
    	hThread = (HANDLE)_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, NULL);
    
    	for(i = 0; i < 10; i++)
    	{
    		printf("main thread: round: %u\n", i);
    		Sleep(1000);
    	}
    
    	WaitForSingleObject(hThread, INFINITE);
    
    	printf("end main thread\n");
    
    	return 0;
    }
    

    Ausgabe:

    main thread id: 3816
    start second thread....
    main thread: round: 0
    form second thread: main thread supeneded: 1
    from second thread: round: 0
    from second thread: round: 1
    from second thread: round: 2
    from second thread: round: 3
    from second thread: round: 4
    from second thread: round: 5
    from second thread: round: 6
    from second thread: round: 7
    from second thread: round: 8
    from second thread: round: 9
    main thread: round: 1
    main thread: round: 2
    main thread: round: 3
    main thread: round: 4
    main thread: round: 5
    main thread: round: 6
    main thread: round: 7
    main thread: round: 8
    main thread: round: 9
    end main thread
    

    Und das will er denk ich ned. Ich hab mal einen Quellcode gesehen der aus der ntdll.dll die Funktion "ZwSuspendProcess" exportiert. Weiss aber ned in wie weite diese zu gebrauchen ist.

    Wies ich gemacht hab einen Prozess zu suspenden:
    Mich als Debugger drangehaent und bei jeder CREATE_THREAD / CREATE_PROCESS notification einfache den Thread suspended.

    Peace & Blessed Love C0de4Fun


Anmelden zum Antworten