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.
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