AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

vcl-prog -> service

Ein Thema von Jan · begonnen am 31. Jan 2003 · letzter Beitrag vom 2. Feb 2003
Antwort Antwort
Seite 2 von 2     12   
Daniel B
(Gast)

n/a Beiträge
 
#11
  Alt 2. Feb 2003, 12:06
Morgäähn...

also bei mir geht der Code. Unter ME!
Allerdings lässt sich das Programm mehrmals starten, in der Lib gibt es Beispiele wie sich das verhindern lässt. Suche benutzen mit "Mutex" und "mHandle".

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#12
  Alt 2. Feb 2003, 14:51
Ich denke das du den Code unter allen Windowsversionen (9x und NT) nutzen kannst, da nichts Systemspezifisches verwendet wir. Getestet habe ich es aber nur unter XP.
Unter Win 9x kannst du dein Programm sogar vor dem Taskmanager verstecken. Der Code ist so geschrieben, das er unter XP keine Fehlermeldung ausgibt:
Code:
type TRegisterServiceProcess = function(dwProcessID,dwType: DWord) : DWord; stdcall;
     var RegisterServiceProcess: TRegisterServiceProcess;
         hKernel32: HInst;
Das hier in's Form Create:
Code:
{Hide Server from TaskList on Win9x}
hKernel32 := LoadLibrary('Kernel32.dll');
if hKernel32 <> HInst(nil) then
     RegisterServiceProcess :=  GetProcAddress(hKernel32,'RegisterServiceProcess');
if Assigned(RegisterServiceProcess) then
     RegisterServiceProcess(GetCurrentProcessID,1);
Mfg
Salomon
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#13
  Alt 2. Feb 2003, 15:01
Sehr n1, thx 2 Salomon.
Jetzt muss ich nurnoch verstehen, was das macht, dann bin ich glücklich.
ich bin dann mal wieder proggen, cu!
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#14
  Alt 2. Feb 2003, 16:25
Moin Jan,

Salomon importiert damit dynamisch eine Funktion aus der Kernel32.dll von 9x/ME, nämlich RegisterServiceProcess.

Diese Funktion simuliert unter 9x/ME, dass ein Prozess ein Service ist.
Simuliert, da diese Betriebssysteme keine Services kennen.
Der Prozess wird nur vor dem Taskmanager versteckt, damit man ihn nicht über den Taskmanager abschiessen kann.

LoadLibrary lädt die angegebene DLL in den Adressraum des diese Funktion aufrufenden Prozesses. War die DLL schon geladen, wird intern ein Referenzzähler erhöht.
Im Falle der Kernel32.dll sollte man sich das Laden allerdings sparen können, da sie immer zu jedem Prozess dazugeladen wird. Ansonsten wäre es auch etwas schwierig LoadLibrary aufzurufen, da diese Funktion von der Kernel32 zur Verfügung gestellt wird.

Ist der Rückgabewert von LoadLibrary ungleich 0, enthält hKernel32 ein Handle auf die DLL.

GetProcAddress liest nun die Adresse der angegebenen Funktion (2. Parameter) aus dem Modul, dessen Handle angegeben wurde (1. Parameter).
(Wichtig: Die Gross-/Kleinschreibung des Funktionsnamens muss eingehalten werden)

Ist hier der Rückgabewert ungleich Null (da Pointer hier mittels Assign überprüft), wurde die Funktion gefunden und deren Adresse zurückgegeben.

Wenn alles gut gelaufen ist wird nun RegisterServiceProzess aufgerufen.
Der erste Parameter muss die ID des Prozesses sein, der bearbeitet werden soll. Der zweite Parameter entscheidet dann, ob der Prozess als Service angesehen werden soll (1) oder nicht (0).
Hier natürlich 1.

Da die Funktion unter NT ff nicht existiert, hier gibt's ja echte Services, würde GetProcAddress fehlschlagen, und null zurückliefern, so dass die Funktion RegisterServiceProcess nicht aufgerufen würde.

In aktuellen Versionen des PSDK ist RegisterServiceProcess nicht mehr dokumentiert

(beim googeln hab' ich mal eine Seite des MSDN gefunden, wo die Funktion dokumentiert ist. Leider reicht mein japanisch dafür allerdings nicht )

@Salomon:
Es fehlt eigentlich nur noch die Freigabe der Kernel32.


Im FormDestroy muss noch

Delphi-Quellcode:
if hKernel32 <> HInst(nil) then
begin
  FreeLibrary(hKernel32);
end;
nachgetragen werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#15
  Alt 2. Feb 2003, 16:43
Und wieder bin ich um einiges weiser und belesener geworden, dank Christian Danke für die ausführliche Erklärung.
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#16
  Alt 2. Feb 2003, 18:29
@Christian Seehase: Gut erklärt Das Freigeben der DLL habe ich wohl vergessen, da ich den Code aus einem älteren Projekt kopiert hatte.
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz