如何拦截/重写Windows ODBC调用?

时间:2010-06-18 01:19:13

标签: windows odbc hook

我希望在命中ODBC堆栈之前直接修改ODBC调用,或者在ODBC堆栈和我正在使用的连接的dll驱动程序之间修改ODBC调用。例如,如果应用程序执行SELECT,我希望能够将其修改为SELECT_ALL我该怎么做?

1 个答案:

答案 0 :(得分:1)

ODBC设置信息指向驱动程序DLL。您可以用自己的具有ODBC入口点的DLL替换它。只需将您不关心的所有内容简单地调用到“真正的”DLL即可。执行和准备入口点可以在将给定语句传递给驱动程序DLL之前修改它。

例如,如果使用用户DSN,则可以使用自己的填充程序DLL替换HKCU \ Software \ ODBC.ini \ datasourcename \ Driver中的值。

经过一番谷歌搜索,我找不到一个明显的空壳项目,这将是一个理想的起点。 API reference包含有关API的详细信息。但总的来说,你不应该真的需要那里的信息。您只需将每个API的参数传递给actuall驱动程序DLL。可以从sql.hsqlext.h中提取函数原型。

可能比编写填充程序DLL更容易的替代方法是仅挂钩执行和准备函数(可能只是SQLExecDirect和SQLPrepare)。 This article是我看到的第一个打击。