tags:

views:

57

answers:

2

I'm currently using SQLitening (www.sqlitening.com) in a C++ application where I'm calling SQLitening.dll. SQLitening.dll makes subsequent calls to SQLiteningClient.dll, Zlib.dll and SQLite3.dll. I am hooking SQLitening.dll explicitly, executing a few functions, and then I am closing the connection and dereferencing the dll with FreeLibrary.

However, the subsequent dlls (SQLiteningClient.dll, etc) are remaining hooked to the calling process. Whenever I try to hook SQLitening.dll again, it hooks fine, but some of the functions misbehave, such as the function to query the remote database. I can't help but think this is because those dlls aren't being free'd properly. Whenever I had hooked the dll implicitly (hooking each function globally), everything worked fine as long as I kept it in memory the whole time. However, I need to do this explicitly.

Note: Fred Meier of SQLitening said that explicit linking worked fine in a PowerBasic application. I should also note that SQLitening was written in PowerBasic.

Is there any way to spawn a separate process or thread for SQLitening.dll to hook everything to, so that when I dereference SQLitening I can just kill that process? Or is there a special way to make sure that everything that SQLitening calls is being dereferenced properly? Thanks.

-Matt Phelps

-Resolution Systems

A: 

Just unhook your hooks or check if function is already hooked before hook it.

Abyx
Sounds like it could have come from "Programming by Dr. Suse"
Scott Chamberlain
A: 

I solved the issue by just using a COM exe that loads the dll explicitly.

Matt Phelps