RegisterServiceProcess unter WinXP
-
Hi!
Entweder ich sehe schlecht, oder RegisterServiceProcess funktioniert unter WinXP nicht.... hier mein Code:
// ... typedef DWORD (WINAPI * PREGSERVICE) (DWORD, DWORD); // ... static HMODULE hKernel; // kernel32.dll static PREGSERVICE pRegService; // ... // kernel32.dll laden if((hKernel = LoadLibrary(TEXT("kernel32.dll"))) == 0) { MessageBox(0, TEXT("Konnte kernel32.dll nicht öffnen!"), TEXT("NetSpy"), MB_OK | MB_ICONSTOP); DestroyWindow(hWnd); } // Funktionspointer ermitteln pRegService = (PREGSERVICE) GetProcAddress(hKernel, "RegisterServiceProcess"); pRegService(0, 1); FreeLibrary(hKernel); // kernel32.dll freigeben // ...
Wieso funktioniert das nicht (bekomme immer einen Fehler, dass irgendwas mit der Adresse 0x00000000 oder so nicht gemacht werden kann ;))? Vielleicht gleich nochwas: Wieso lässt er mich bei GetProcAddress das TEXT-Makro nicht setzen? Ich weiß es ist kein LPCTSTR, sondern ein LPCSTR, aber es muss doch irgendwie gehen, oder?
cya
-
Die Funktion gibts einfach unter Windows XP nicht. So einfach ist das.
-
Ok, dann schonmal danke. Aber irgendwie muss das doch gehen, dass man ein Programm nicht schließen kann!
cya
-
Als Dienst!
-
Ähm... macht RegisterServiceProcess nicht genau das?!?
cya
-
Ja vielleicht, aber das funktioniert halt unter Windows 2000 und XP nicht. Ist das denn so schwer zu verstehen?
-
dieser Aussage schliesse ich mich an........ ich habe das von allen seiten ausprobiert.... und nichts.
-
Aber irgendwie MUSS es doch gehen! MasterEye kann das ja auch ;). Es ist so: Ich programmiere für unseren neuen (der ist viel cooler als der alte :D) Computerraum in der Schule ein kleines Programm, dass allerlei Sachen macht und die "bösen" Schüler sollen das ja nicht einfach mit dem Taskmanager abschießen können. Und den Taskmanager komplett deaktivieren will ich nicht.
cya
-
Dann machst du eben für Windows 9x eine Version und eine für Windows NT, 2000 und XP
-
Ne, ich brauch nur eine WinXP-Version... nochmal: Wie kann ich unter WinXP ein Programm unschließbar machen?
cya
-
Das ist nicht so einfach. Aber beginne deine Recherche doch einfach mal bei der Funktion CreateService.
-
Ok, danke für den Tipp. Ich schau mir das ganze dann mal an :D. Wenn doch noch einer was einfacheres/besseres weiß, einfach sagen ;).
cya
-
Lass das Programm einfach nicht laufen, dann kanns auch keiner beenden.
-
Mei bist du lustig ;)...
cya
-
@BlackShadow: Du hattest doch mal so'n Code, wo das angeblich funktioniert haben soll :). Könntest du mir den mal schicken? => webmaster@magiccreating.com
thx & cya
-
Original erstellt von MagiC Creator:
Code vorkauen bringt im Allgemeinen nix, weil da lernt man ja nix dabeiWarum soll Dir nun jemand Code schicken? Trotzdem: Schreib Dir bitte einen Service, bevor Du mit solchem Mist anfängst.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/services.asp?frame=true
-
Ok ok... ich geb auf
(Nicht vor dem Problem, sondern vor dir ;)). Eine Frage hätt' ich aber noch: BlackShadow's Lösung, war die mit Services oder hat er das anders gemacht?
cya
-
Er hat es anders gemacht und dadurch dafür gesorgt, daß die Kiste nicht mehr administrierbar ist.
-
Ne, das wollen wir unseren armen Rechnern in der Schule ja nicht antun... ich druck mir das Service-Zeugs der MSDN mal aus und schau mir das morgen in der Schule (hab da eh nix besseres zu tun ;)) mal durch.
Schönen Abend noch & cu
-
Auch wenn die Antwort wohl 8 Jahre zu spät ist, will ich für alle nachfolgenden Leser mal eine Idee publizieren:
Also, was ich mal progammiert hab: Das Programm läuft 2 Mal, in beiden Programmen läuft ein Thread, der zählt, wie oft dein Programm läuft. Sollte nur 1 laufen (der eine Prozess wurde abgeschossen!) wird das Programm direkt sich selbst neu starten .
Folglich ist das Programm "unschliessbar".Hoffe irgendwem hilft das
Mfg DerCoder