我正在修改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. 如何攔截
- 3. 攔截process.stdout.write調用
- 4. 攔截AJAX調用
- 5. 攔截javascript調用
- 6. 如何攔截實例方法調用?
- 7. 如何「攔截」測試方法調用?
- 8. 如何攔截dll方法調用?
- 9. 如何停止DirectX攔截調用
- 10. 如何爲ILogger攔截攔截器
- 11. 如何攔截並重寫受損的JSON調用與中間件
- 12. 多重方法攔截和攔截器重用
- 13. 如何在Angular2中將Http_Provider重寫爲AngularJS攔截器
- 14. .NET方法調用攔截
- 15. 攔截subprocess.Popen調用在Python
- 16. UITextView攔截調用setSelectedRange?
- 17. 攔截COM dllhost.exe調用
- 18. 攔截angulargs http調用
- 19. Python攔截方法調用
- 20. RenderScript攔截函數調用
- 21. Dojo - 攔截XHR調用
- 22. Phonegap攔截jQueryMobile Ajax調用
- 23. 攔截對javax.crypto的調用
- 24. 不使用攔截器綁定調用攔截器方法
- 25. 攔截url重寫模塊,防止重寫
- 26. 攔截器不攔截
- 27. 如何用JQuery攔截URL
- 28. 如何攔截uvm_error並導致回調?
- 29. Windows Mobile攔截通知
- 30. $ httpProvider攔截器不攔截我的API調用
感謝您的建議,我曾考慮過這個問題。我試圖做一個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