ServiceMain
-
Also entweder Du packst den Code deines "Kazaa Blockers" in den Quelltext Deines Dienstes oder Du schaust Dir "AppToService" von Basta Computing an, das tut nämlich genau das, was Du hier krampfhaft mit Deinem Dienst versuchst...
-
so, also ich probiers nochmal zu erklären.
ich hab da zwei programme. das eine programm heisst srv.exe das ist der dienst.
die servicemain von dem dienst sieht jetzt so aus:void WINAPI ServiceMain(DWORD argc, LPTSTR *argv) { DWORD status; DWORD specificError; m_ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING; m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; m_ServiceStatus.dwWin32ExitCode = 0; m_ServiceStatus.dwServiceSpecificExitCode = 0; m_ServiceStatus.dwCheckPoint = 0; m_ServiceStatus.dwWaitHint = 0; m_ServiceStatusHandle = RegisterServiceCtrlHandler("Service1",ServiceCtrlHandler); if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0) { return; } m_ServiceStatus.dwCurrentState = SERVICE_RUNNING; m_ServiceStatus.dwCheckPoint = 0; m_ServiceStatus.dwWaitHint = 0; if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus)) { } bRunning=true; while(bRunning == true) { Sleep(3000); ZeroMemory( &si, sizeof(si) ); // fülle Speicherbereich mit NULL si.cb = sizeof(si); // Grösse des Speicherbereichs ZeroMemory( &pi, sizeof(pi) ); // fülle Speicherbereich mit NULL si.lpDesktop = "WinSta0\\default"; CreateProcess( NULL, argv[1], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ); WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); } }d.h. der dienst tut nichts anderes als jede drei sekunden ein beliebiges programm zu starten. (argv[1]) << dort wird das programm mit parametern übergeben.
so das 2te programm heisst: kb.exe
nach dem ich jetzt den dienst installiert habe gehe ich den dienstmanager von win2k. dort stelle ich benutzername und kennwort ein, in meinem fall admininstrator, ne.
dannach bei startparameter unter dem "reiter" "allgemein" gebe ich das programm ein mit pfad, zb.: "c:\kb.exe"
so, jetzt wird jede drei sekunden kb.exe gestartet was ja auch ok ist.
das programm kb.exe macht auch nix anderes als sich die prozess liste zu holen wie das auch der taskmanager macht und sucht dort nach "kazaa". wenn kb.exe den prozess von kazaa gefunden hat dann wird kazaa geschlossen und kb.exe wird auch wieder geschlossen. solange wartet der dienst (WaitForSingleObject( pi.hProcess, INFINITE );)
dann wiederholt sich das. kb.exe wird vom dienst wieder gestartet. findet kb.exe kazaa bei den prozessen wird kazaa geschlossen mit kb.exe ansonsten beendet sich kb.exe wieder. eigentlich ganz einfach...
funktioniert auch alles supa. nur unter windows xp kann ich den dienst mit dem taskmanager beenden. also den dienst srv.exe und das ist doof.das sollte nicht sein.
ich hab übrigens apptoservice ausprobiert. aber es is nich das was ich suche.
-
das mit dem kazaa blocker in den dienst packen hab ich probiert. aber da mir ja hier gesagt wurde, der dienst läuft auf einer andere eben von windows, also anderes dekstop oder so, funzt das nicht so ganz. also kazaa wird dabei nciht geschlossen.
ps.: meine shift-taste ist wirklich kaputt. wollte mir bald ne neue tastatur holen. danke für den hinweis

-
kann man den dienst nicht irgendwie unsichtbar machen lassen? also damit man ihn nicht sieht im taskmanager?
-
AlterBesucher schrieb:
ich hab übrigens apptoservice ausprobiert. aber es is nich das was ich suche.
Bist Du sicher?
Ich kenne eine Firma die benutzt genau solche Tools wie Du eins geschrieben hast und schwört auf AppToService... eben weil man im TaskManager nix killen kann... nur über die Service-MMC...
Dann zur Arbeitsweise Deines "kb.exe"
a) Schau Dir mal die Funktion SetTimer in der MSDN an. Alle 3 Sekunden ein Programm über einen Dienst starten zu lassen ist kaum mehr als "schlechtes Programmdesign" zu bezeichnen.
b) Wenn Du SetTimer kennst, kannst Du bei Empfang der WM_TIMER Nachricht die Prozessliste abfragen und nach Kazaa schnüffeln und ggfs. beenden.
-
AlterBesucher schrieb:
aber da mir ja hier gesagt wurde, der dienst läuft auf einer andere eben von windows, also anderes dekstop oder so, funzt das nicht so ganz.
Klar 'funzt' das, nur anders. Stichpunkte habe ich Dir alle gegeben, einfach mal in die Hilfe schauen, z.B. unter:
OpenWindowStation
SetProcessWindowStation
OpenInputDesktop
EnumDesktopWindowsAber warum entziehst Du dem Gast nicht das Recht, die Exe auszuführen? Dann rauchst Du nicht eine einzige Zeile Code ...
-
hmm.. aber das tool ist ja noch dazu keine freeware. oder hab ich da was falsch verstanden? und bezahlen möchte ich dafür nich so gerne.
-
also wir haben bei uns lider keine gastkonten. die haben admin rechte alle. wir nehmen für solche sachen wächterkarten damit am system nix verändert wird.
aber könnte dann der gast die exe dann nicht umbenennen? naja ich probiers nochmal mit em apptoservice.. anosnten hmm ..ich kapier nich wieso dass unter win2k läuft und unter xp wieder nich so richtig..

-
Ihr solltet mal jemanden an die Rechner lassen, der sich damit auskennt.
-
eijeijei ... fällt dir nix mehr sachliches zu diesem thema ein? naja is auch egal. ich werds schon irgendwie selber hinkriegen.
dir noch einen schönen abend "- king -"
bye.
-
Nur für den Fall, das Du das hier weiter oben übersehen hast (hatte ich nachträglich editiert):
Hepi schrieb:
Dann zur Arbeitsweise Deines "kb.exe"
a) Schau Dir mal die Funktion SetTimer in der MSDN an. Alle 3 Sekunden ein Programm über einen Dienst starten zu lassen ist kaum mehr als "schlechtes Programmdesign" zu bezeichnen.
b) Wenn Du SetTimer kennst, kannst Du bei Empfang der WM_TIMER Nachricht die Prozessliste abfragen und nach Kazaa schnüffeln und ggfs. beenden.
-
Ich denke du solltest deine Vorgehensweise lieber nochmals etwas überdenken.
Evtl für dich ganz interessant: http://www.codeproject.com/threads/procmon.asp