我正在修改ODBC调用,直接在打开ODBC堆栈之前,或者在ODBC堆栈和我正在使用的连接的dll驱动程序之间。例如,如果应用程序执行SELECT操作,我希望能够将其修改为SELECT_ALL我该怎么做?如何拦截/重写Windows ODBC调用?
5
A
回答
1
ODBC安装信息指向驱动程序DLL。您可以用您自己的具有ODBC入口点的DLL来替换它。简单地将所有你不关心的内容简单地称为“真正的”DLL。执行并准备入口点可以在将给定语句传递给驱动程序DLL之前修改它。
例如,如果使用用户DSN,则可以用您自己的shim DLL替换HKCU \ Software \ ODBC.ini \ datasourcename \ Driver中的值。
经过一番谷歌搜索之后,我没有找到一个明显的空壳项目,这将是一个理想的起点。 API reference有关于API的详细信息。但总的来说,你不应该真的需要从那里获得信息。您只需将每个API的参数传递给实际驱动程序DLL即可。函数原型可以从sql.h
和sqlext.h
中提取。
另一种可能比编写shim DLL更简单的方法是只钩住execute和prepare函数(可能只是SQLExecDirect和SQLPrepare)。 This article是我看到的第一次打击。
相关问题
- 1. 如何拦截
- 2. 拦截javascript调用
- 3. 如何拦截dll方法调用?
- 4. 如何“拦截”测试方法调用?
- 5. 如何为ILogger拦截拦截器
- 6. 多重方法拦截和拦截器重用
- 7. Python拦截方法调用
- 8. .NET方法调用拦截
- 9. 拦截COM dllhost.exe调用
- 10. Dojo - 拦截XHR调用
- 11. UITextView拦截调用setSelectedRange?
- 12. 拦截subprocess.Popen调用在Python
- 13. 拦截url重写模块,防止重写
- 14. 拦截器不拦截
- 15. Windows Mobile拦截通知
- 16. 如何使用Spring拦截或过滤器拦截资源
- 17. 如何拦截来电pjsip
- 18. 重新调整斜率和重新调整拦截
- 19. 如何拦截RavenDb Session.SaveChanges()
- 20. 在windows中使用vbscript拦截关机
- 21. 如何实际拦截res.render
- 22. EJB 3.1拦截器是“拦截器”吗?
- 23. 拦截与获取Windows Verion相关的API调用
- 24. 使用Selenium拦截Javascript函数调用
- 25. 用Javascript拦截或捕获Ajax调用
- 26. 如何拦截Cmd的+ Q
- 27. 如何拦截@RequestBody绑定
- 28. 如何拦截PDO呼叫?
- 29. 使用属性拦截然后重新发出方法调用
- 30. 如何拦截iPhone旋转
感谢您的建议,我曾考虑过这个问题。我试图做一个C++ DLL来转发所有导出的方法,但没有运气让它工作。任何好的关键字谷歌?再次感谢。 – TwoBitsShort 2010-06-18 05:50:56
@Christian:确保在导出时使用'extern“C”',这样名称就不会被损坏。你可以在DLL上使用'dumpbin/exports'来确保它们没有被修饰。我会与谷歌一起探讨一下,看看我能否找到一些东西。理想情况下,获得一个定义了所有入口点函数的空壳是很好的。 ...似乎应该存在这种性质的东西。 – 2010-06-18 13:03:05
@mark:我使用dumpbin进行扫描,然后使用.def文件声明所有导出的函数。主例程做一个原始的odbc驱动程序的loadlibrary,我改变了注册表以指向我的shim dll。我也尝试了杂注方法。每次我收到驱动程序不支持SQLDirectConnectW方法的通知时。 DirectConnectW不在导出表中,它只是DirectConnect的Unicode版本。有任何想法吗? – TwoBitsShort 2010-06-20 23:28:39