Autor Beitrag
Chris79
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 30.05.08 17:44 
Hallo Leute,

ich verwende die uallCollection, um Hooks auf ein paar API-Funktionen zu setzen. Bei einigen Funktionen funktioniert das auch (eigene Testfunktionen, sowie FindFirstFile und FindNextFile). Bei RegOpenKeyEx gibt es allerdings Probleme.

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:
function myRegOpenKeyEx(hKey: HKEY; lpSubKey: LPCTSTR; ulOptions: DWord; samDesired: REGSAM; phkResult: PHKEY): LongInt;
var
  lCode: LongInt;
  Error: PChar;
begin
  WriteToLog('RegOpenKeyEx called "'+StrPas(lpSubKey)+'"');
  case hKey of
    HKEY_CLASSES_ROOT: WriteToLog('HKEY: HKEY_CLASSES_ROOT');
    HKEY_CURRENT_USER: WriteToLog('HKEY: HKEY_CLASSES_ROOT');
    HKEY_LOCAL_MACHINE: WriteToLog('HKEY: HKEY_CLASSES_ROOT');
    HKEY_USERS: WriteToLog('HKEY: HKEY_CLASSES_ROOT');
    HKEY_PERFORMANCE_DATA: WriteToLog('HKEY: HKEY_CLASSES_ROOT');
    HKEY_CURRENT_CONFIG: WriteToLog('HKEY: HKEY_CLASSES_ROOT');
    HKEY_DYN_DATA: WriteToLog('HKEY: HKEY_CLASSES_ROOT');
  end;
  case samDesired of
    KEY_ALL_ACCESS: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    KEY_CREATE_LINK: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    KEY_CREATE_SUB_KEY: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    KEY_ENUMERATE_SUB_KEYS: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    KEY_EXECUTE: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    KEY_NOTIFY: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    KEY_QUERY_VALUE: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    KEY_SET_VALUE: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    KEY_WOW64_32KEY: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    KEY_WOW64_64KEY: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    KEY_WRITE: WriteToLog('Desired Access: KEY_ALL_ACCESS');
    else WriteToLog('Desired Access : UNKOWN');
  end;
  lCode := nextRegOpenKeyEx(hKey, lpSubKey, ulOptions, samDesired, phkResult);
  if lCode<>ERROR_SUCCESS then
    begin
      FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER + FORMAT_MESSAGE_FROM_SYSTEM, nil, lCode, LANG_USER_DEFAULT, @Error, 0, nil);
      WriteToLog('Error: '+Error);
    end;
  Result := lCode;
end;



Meine Vermutung ist, dass sich der Hook in dem Moment installiert, wenn gerade einige RegOpenKeyEx Funktionsaufrufe erfolgen und es daher zu Problemen kommt. Das Interessante ist, dass die CallBack-Funktion insgesamt drei Mal aufgerufen wird, allerdings immer mit "kaputten" Parametern (leerer lpSubKey z.B.).
Die Funktion nextRegOpenKeyEx arbeitet übrigens korrekt (Ich habe zum Testen mal richtige Parameter übergeben).

Habt Ihr eine Ahnung, was das Problem sein könnte?

Gruß,

Christian

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Fr 30.05.08 19:56 
function myRegOpenKeyEx(hKey: HKEY; lpSubKey: LPCTSTR; ulOptions: DWord; samDesired: REGSAM; phkResult: PHKEY): LongInt; stdcall;

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
Chris79 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 02.06.08 09:38 
Oh man, da hätt' ich auch selbst drauf kommen können :). Vielen Dank!

Ich hätte da noch eine weitere Frage: Gibt es eine Methode, die dll sicher in einen Prozess einzufügen? Im Moment nutze ich SetWindowsHookEx um die DLL in jeden neuen Prozess injizieren zu lassen. Ich habe da den Eindruck, dass meine DLLMain manchmal zu früh aufgerufen wird und der Prozess abstürzt (eine Pause von 1 Sek. hat schon Verbesserungen gebracht). Daher würde ich gerne wissen, ob man den Hauptthread des Prozesses vielleicht solange anhalten kann oder sonstwie feststellen kann, wann ein günstiger Moment wäre, um die DLLMain aufzurufen.

Gruß,

Christian
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 02.06.08 10:41 
user profile iconChris79 hat folgendes geschrieben:
Ich hätte da noch eine weitere Frage: ...

Neue Frage, neuer Thread, daher:

*** CLOSED ***
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.