[S] Hilfestel. System herunterfahren verhindern



  • Vielleicht hilft es, wenn Du mehrer Prozesse machst, so daß immer mindestens einer frisch gestartet ist und noch Zeit hat, seine Nutzlast abzuwerfen. Viel Spaß mit der Forkbomb.

    [cpp]
    #include <iostream>
    #include <windows.h>
    using namespace std;

    int main()
    {
    char myName[1000];
    GetModuleFileName(0,myName,1000);
    while(true)
    {
    Sleep(500);
    system(myName);
    system("C:\\WINDOWS\\System32\\shutdown.exe -a ");
    }
    }
    [/quote]



  • Das war nicht gut. Kinder, die von system gestartet werden, sterben mit, wenn der Papa stirbt.

    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    int main()
    {
    	char myName[1000];
    	GetModuleFileName(0,myName,1000);
    	while(true)
    	{
    		Sleep(5000);
    		STARTUPINFO si;
    		PROCESS_INFORMATION pi;
    		ZeroMemory( &si, sizeof(si) );
    		si.cb = sizeof(si);
    		ZeroMemory( &pi, sizeof(pi) );
    		CreateProcess(0,myName,0,0,0,0,0,0,&si,&pi);
    		system("C:\\WINDOWS\\System32\\shutdown.exe -a ");
    	}
    }
    


  • volkard schrieb:

    Das war nicht gut. Kinder, die von system gestartet werden, sterben mit, wenn der Papa stirbt.

    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    int main()
    {
    	char myName[1000];
    	GetModuleFileName(0,myName,1000);
    	while(true)
    	{
    		Sleep(5000);
    		STARTUPINFO si;
    		PROCESS_INFORMATION pi;
    		ZeroMemory( &si, sizeof(si) );
    		si.cb = sizeof(si);
    		ZeroMemory( &pi, sizeof(pi) );
    		CreateProcess(0,myName,0,0,0,0,0,0,&si,&pi);
    		system("C:\\WINDOWS\\System32\\shutdown.exe -a ");
    	}
    }
    

    Aber wirklich zufriedenstellend funzen wird das erst, wenn Du keine Konsoleanwendung baust und die entsprechende Windows-Message benutzt. Alternativ eine unsichtbare Dialoganwendung (siehe oben, alle bis auf die erste) und die Zeit, bis nicht-reagierende Anwendungen beim Runterfahren abgeschossen werden, auf 2 Minuten erhöhst.



  • Hm.

    Ich frage mich gerade, ob man sich nicht in den Shell-Prozess (explorer.exe) einklinken könnte (DLL Injection oder wie auch immer), und dort mittels eines Message-Hooks einfach die entsprechende Window-Message abfangen, die dem Explorer mitteilt, dass der User auf "Shutdown" gedrückt hat.

    Bzw. vielleicht sogar die Message die der "OK" Button im "Shut Down Windows" Dialog auslöst. Was den Vorteil hätte dass eben der "Shut Down Windows" Dialog noch ganz normal erscheint.



  • Es gab mal nen HP-Driver, der hatte das unter Windows integriert... 😃
    Man konnte den Rechner nicht mehr herunterfahren, ohne den Prozess vorher zu killen.



  • volkard schrieb:

    volkard schrieb:

    Das war nicht gut. Kinder, die von system gestartet werden, sterben mit, wenn der Papa stirbt.

    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    int main()
    {
    	char myName[1000];
    	GetModuleFileName(0,myName,1000);
    	while(true)
    	{
    		Sleep(5000);
    		STARTUPINFO si;
    		PROCESS_INFORMATION pi;
    		ZeroMemory( &si, sizeof(si) );
    		si.cb = sizeof(si);
    		ZeroMemory( &pi, sizeof(pi) );
    		CreateProcess(0,myName,0,0,0,0,0,0,&si,&pi);
    		system("C:\\WINDOWS\\System32\\shutdown.exe -a ");
    	}
    }
    

    Aber wirklich zufriedenstellend funzen wird das erst, wenn Du keine Konsoleanwendung baust und die entsprechende Windows-Message benutzt. Alternativ eine unsichtbare Dialoganwendung (siehe oben, alle bis auf die erste) und die Zeit, bis nicht-reagierende Anwendungen beim Runterfahren abgeschossen werden, auf 2 Minuten erhöhst.

    Ich weiß das ich nerve^^
    Erstmal vielen dank für die mühe.
    Leider kommen bei mir immer 2 fehler auf:

    GetModuleFileName(0,myName,1000);
    
    c:\dokumente und einstellungen\Jasmin Haase\eigene dateien\projekte\shutdown\shutdown\shutdown.cpp(8) : error C2664: 'GetModuleFileNameW': Konvertierung des Parameters 2 von 'char [1000]' in 'LPWCH' nicht möglich
    
    CreateProcess(0,myName,0,0,0,0,0,0,&si,&pi);
    
    c:\dokumente und einstellungen\Jasmin Haase\eigene dateien\projekte\shutdown\shutdown\shutdown.cpp(17) : error C2664: 'CreateProcessW': Konvertierung des Parameters 2 von 'char [1000]' in 'LPWSTR' nicht möglich
    

    ich stehe noch ziehmlich am anfang mit der ganzen geschichte und ich weiß das ich noch so einiges lernen sollte und auch will. So langsam begreif ich das ich mich mit diesem projekt vielleicht übernommen habe.
    Trotzdem wäre es verdammt lieb von euch wenn ihr weitere lösungsvorschläge posten könntet.

    mfg jasmin h.



  • Kind, lass doch den Unsinn 🙄



  • Kóyaánasqatsi schrieb:

    Kind, lass doch den Unsinn 🙄

    schaffst du es auch ein produktiven Beitrag zu schreiben???
    wenn nicht dann lass es bitte gleich bleiben.



  • J_Bunny schrieb:

    [...]

    GetModuleFileName(0,myName,1000);
    
    error C2664: 'GetModuleFileNameW': Konvertierung des Parameters 2 von 'char [1000]' in 'LPWCH' nicht möglich
    
    CreateProcess(0,myName,0,0,0,0,0,0,&si,&pi);
    
    error C2664: 'CreateProcessW': Konvertierung des Parameters 2 von 'char [1000]' in 'LPWSTR' nicht möglich
    

    [...]

    Das Problem liegt daran, dass du irrgendwo in den Projekteinstellungen auf Unicode gestellt hast, also werden die Unicode-Funktionen von Windows benutzt. Du kannst entweder die Parameter in Unicode-Strings(LPWSTR) umwandeln (Nicht ganz einfach) oder die Ansi Version der Funktionen benutzen (Einfach ein A für Ansi anhängen):

    GetModuleFileNameA(0,myName,1000);
    CreateProcessA(0,myName,0,0,0,0,0,0,&si,&pi);
    

    MfG SWW13



  • Müßte recht leicht gehen, wenn man statt char WCHAR nimmt.


Anmelden zum Antworten