Entwickler-Ecke

Dateizugriff - Der Prozedureinsprungpunkt wurde nicht gefunden.


Crowbar - Mi 15.10.03 12:52
Titel: Der Prozedureinsprungpunkt wurde nicht gefunden.
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


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.


Delete - Mi 15.10.03 13:12


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.


Crowbar - Mi 15.10.03 13:29

Hallo Luckie,

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

Crowbar


Delete - Mi 15.10.03 13:33


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;


Motzi - Mi 15.10.03 13: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...


Crowbar - Mi 15.10.03 13:37

Hallo,
danke für die Nachhilfe "dynamisch". :-)

So wird es klappen!

Bye Crowbar