我想在命中ODBC堆栈之前直接修改ODBC调用,或者在ODBC堆栈和我正在使用的连接的dll驱动程序之间修改ODBC调用.例如,如果应用程序执行SELECT,我希望能够修改它是SELECT_ALL我该怎么做?
ODBC 设置信息指向驱动程序 DLL。您可以将其替换为您自己的具有 ODBC 入口点的 DLL。只需让所有您不关心的内容成为对“真实”DLL 的简单调用即可。执行和准备入口点可以在将给定语句传递给驱动程序 DLL 之前修改该语句。
例如,如果使用用户 DSN,您可以将 HKCU\Software\ODBC.ini\datasourcename\Driver 中的值替换为您自己的填充程序 DLL。
经过一番谷歌搜索后,我没有找到一个明显的空壳项目作为理想的起点。API参考包含有关 API 的详细信息。但一般来说,您实际上并不需要从那里获取信息。您只需将每个 API 的参数传递给实际的驱动程序 DLL。函数原型可以从sql.h和中提取sqlext.h。
另一种可能比编写 shim DLL 更容易的方法是仅挂钩执行和准备函数(可能只是 SQLExecDirect 和 SQLPrepare)。 这篇文章是我看到的第一篇关于这样做的文章。