Entwickler-Ecke

Windows API - CompareStringA Hook Problem!


SAiBOT - Sa 24.09.05 16:39
Titel: CompareStringA Hook Problem!
Hi, ich habe versucht einen Hook auf "CompareStringA" zu setzen leider bekomme ich immer einen "Acces violation" Fehler wenn ich die gehookte funktion aufrufe!
vll findet ihr ja den Fehler, hier der Code:

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:
44:
45:
library Hook;

uses
  windows,
  uallhook;

var
old_CompareStringA:  function(Locale:LCID; dwCmpFlags:DWORD; lpString1:PAnsiChar; cchCount1:Integer; lpString2:PAnsiChar; cchCount2:Integer): Integer; stdcall;
next_CompareStringA: function(Locale:LCID; dwCmpFlags:DWORD; lpString1:PAnsiChar; cchCount1:Integer; lpString2:PAnsiChar; cchCount2:Integer): Integer; stdcall;

function my_CompareStringA(Locale:LCID; dwCmpFlags:DWORD; lpString1:PAnsiChar; cchCount1:Integer; lpString2:PAnsiChar; cchCount2:Integer): Integer;
begin
   MessageBox(0, PChar(lpString1+' with '+lpString2), 'Compare'$00000040);
   Result := next_CompareStringA(Locale, dwCmpFlags, lpString1, cchCount1 ,lpString2, cchCount2);
end;

procedure injectmain;
var p:pointer;
begin
  p := GetProcAddress(GetModuleHandle('kernel32.dll'),'CompareStringA');
  if p <> nil then begin
    @old_CompareStringA := p;
    uallHook.HookCode(@old_CompareStringA,@my_CompareStringA,@next_CompareStringA);
  end;
end;

procedure uninjectmain;
begin
  uallHook.UnhookCode(@next_CompareStringA);
end;

procedure dllmain(dwReason: integer);
begin
  case dwreason of
    DLL_PROCESS_ATTACH:
      injectmain;
    DLL_PROCESS_DETACH:
      uninjectmain;
  end;
end;

begin
  DLLProc := @DLLMain;
  DLLMain(1);
end.


uall@ogc - Sa 24.09.05 16:51

hinter dem my_CompareStringA fehlt am schluss nen

stdcall;


SAiBOT - Sa 24.09.05 16:53

X.x Danke, jetzt gehts!