If they are in different processes they are certainly on different threads, therefore. Yes, hooks only act on the handle for which they were configured, but that is what you want I think. You open the database twice: ~~~~ db_client <-- sqlite3_open_v2() db_sys <-- sqlite3_open_v2() ~~~~ Client opens db\_client in process A. Install preupdate hook on db\_sys in process B. No need to share pointers. The sqlite3 library will do the rest.