Entwickler-Ecke
Windows API - uallHook für RegOpenKeyEx
Chris79 - Fr 30.05.08 17:44
Titel: uallHook für RegOpenKeyEx
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.
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
Narses: Code- durch Delphi-Tags ersetzt
uall@ogc - Fr 30.05.08 19:56
function myRegOpenKeyEx(hKey: HKEY; lpSubKey: LPCTSTR; ulOptions: DWord; samDesired: REGSAM; phkResult: PHKEY): LongInt; stdcall;
Chris79 - 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 - Mo 02.06.08 10:41
Chris79 hat folgendes geschrieben: |
| Ich hätte da noch eine weitere Frage: ... |
Neue Frage, neuer Thread, daher:
*** CLOSED ***
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!