Autor Beitrag
Crowbar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Mi 15.10.03 11:52 
Hallo,

ich bin dabei ein Tool zu programmieren, dass verschiedene System-Informationen und Funktionen des PC's zeigen bzw. demonstrieren soll. Darunter soll auch eine Demonstration sein, um Programme vor dem Taskmanager zu verstecken und wieder anzuzeigen. Mit der untenstehenden Anweisung ("RegisterServiceProcess") wird in Windows die Funktion RegisterServiceProcess aus der Datei KERNEL32.DLL importiert. Natürlich funktioniert dies in WIN9.X ohne Probleme. Aber ab WINNT gibt es nicht mehr die Prozedur "RegisterServiceProcess" in der Datei "KERNEL32.DLL" und somit erscheint beim Start eine Fehlermeldung ("Der Prozedureinsprungpunkt "RegisterServiceProcess" wurde nicht gefunden."), die ich auch mit einer "try...except...end" - Anweisung nicht unterbinden kann.

Nun, dachte ich mir eine Abfrage ("CheckWindows") einzubauen, um zu überprüfen, welches Betriebssystem genutzt wird. Wenn das Betriebssystem WIN9.x genutzt wird, soll die Function "RegisterServiceProcess" aufgerufen werden, ansonsten nicht.
Doch die Fehlermeldung (ab WINNT) erscheint weiterhin, da die Initialisierung, egal ob sie im Programm genutzt wird oder nicht, so oder so durchgeführt wird.

Gibt es eine Möglichkeit, die erscheinende Fehlermeldung trotzdem nicht anzeigen zu lassen?

Bye
Crowbar

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
...
implementation
  function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcallexternal 'KERNEL32.DLL';
...

Procedure TForm1.Button1Click(Sender: TObject);
begin
   if CheckWindows then RegisterServiceProcess(GetCurrentProcessID,1);    // **verstecken**
  ...
end;

Procedure TForm1.Button2Click(Sender: TObject);
begin
   if CheckWindows then RegisterServiceProcess(GetCurrentProcessID,0);   // **wieder zeigen **
  ...
end;


Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 11830
Erhaltene Danke: 162

Windows 7 Home
BDS2006
BeitragVerfasst: Mi 15.10.03 12:12 
ausblenden Delphi-Quelltext
1:
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcallexternal 'KERNEL32.DLL';					

Logisch, dass der Fehler immer kommt. Du bindest die Funktion ja auch statisch ein. Du mußt sie dynamisch laden oder eben gar nicht.

_________________
Gruß Michael
Crowbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Mi 15.10.03 12:29 
Hallo Luckie,

wie bzw. mit welcher Anweisung muss ich die Function dynamisch laden?

Crowbar
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 15.10.03 12:33 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
type
  TRegisterServiceProcess = function(dwProcessID, dwType: dword):
    dword; stdcall;
var
  RegisterServiceProcess  : TRegisterServiceProcess;
  dll                     : dword = 0;
  Win9x                   : boolean = true;


{ ... }

Procedure TForm1.Button1Click(Sender: TObject);
begin
  if(Win9x) and (@RegisterServiceProcess <> nilthen
    RegisterServiceProcess(GetCurrentProcessId,1);
end;

Procedure TForm1.Button2Click(Sender: TObject);
begin
  if(Win9x) and (@RegisterServiceProcess <> nilthen
    RegisterServiceProcess(GetCurrentProcessId,0);
end

{ ... }



initialization
  Win9x := (Win32Platform = VER_PLATFORM_WIN32_WINDOWS);
  if(Win9x) then begin
    dll   := LoadLibrary('kernel32');
    if(dll <> 0then begin
      @RegisterServiceProcess := GetProcAddress(dll,'RegisterServiceProcess');
      if(@RegisterServiceProcess = nilthen begin
        FreeLibrary(dll);
        dll := 0;
      end;
    end;
  end;
finalization
  if(dll <> 0then
    FreeLibrary(dll);
end;


Zuletzt bearbeitet von MathiasSimmack am Mi 15.10.03 12:34, insgesamt 1-mal bearbeitet
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mi 15.10.03 12:33 
Wird eine statisch eingelinkte Datei nicht gefunden bricht Windows sofort ab, zu diesem Zeitpunkt existiert der Prozess noch gar nicht wirklich.

Für dyn. Import schau dir mal Suche in: Delphi-Forum, Delphi-Library LOADLIBRARY und Suche in: Delphi-Forum, Delphi-Library GETPROCADDRESS an...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Crowbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Mi 15.10.03 12:37 
Hallo,
danke für die Nachhilfe "dynamisch". :-)

So wird es klappen!

Bye Crowbar