Sto cercando di modificare le chiamate ODBC direttamente prima di colpire lo stack ODBC o tra lo stack ODBC e il driver dll per la connessione che sto usando. Ad esempio, se l'applicazione fa un SELECT, voglio essere in grado di modificarlo essere SELECT_ALL Come posso farlo?Come posso intercettare/riscrivere le chiamate ODBC di Windows?
risposta
Le informazioni di installazione ODBC fanno riferimento alla DLL del driver. È possibile sostituirlo con la propria DLL che ha i punti di accesso ODBC. Semplicemente fai in modo che tutti quelli a cui non ti importa siano semplici chiamate alla DLL "reale". L'esecuzione e la preparazione dei punti chiave possono modificare l'istruzione data prima di passarla alla DLL del driver.
Ad esempio, se si utilizza un DSN utente, è possibile sostituire il valore in HKCU \ Software \ ODBC.ini \ datasourcename \ Driver con il proprio shim DLL.
Dopo un po 'di ricerca su google, non sto trovando un progetto di shell vuoto ovvio che sarebbe un punto di partenza ideale. Lo API reference ha dettagli sull'API. In generale, però, non dovresti davvero avere bisogno di informazioni da lì. Hai solo bisogno di passare i parametri per ogni API alla DLL del driver actuall. I prototipi di funzione potrebbero essere estratti da sql.h
e sqlext.h
.
Un metodo alternativo che potrebbe essere più semplice rispetto alla scrittura di uno shim DLL sarebbe quello di agganciare solo l'esecuzione e preparare le funzioni (probabilmente solo SQLExecDirect e SQLPrepare). This article è il primo colpo che ho visto nel farlo.
- 1. Come posso rilevare le funzioni Javascript chiamate?
- 2. Chiamate di sistema su Windows
- 3. Posso usare LINQ2SQL con ODBC?
- 4. Come posso trovare le chiamate di procedura memorizzate?
- 5. Windows C++: come posso reindirizzare lo stderr per le chiamate a fprintf?
- 6. AppDomain.GetCurrentThreadID vs Thread.ManagedThreadID per le chiamate API di Windows?
- 7. Librerie per la connessione di node.js a odbc su Windows?
- 8. Come "Proteggere" le chiamate AJAX?
- 9. Come chiamate le classi ViewModel?
- 10. Connessione a SQL Server tramite l'autenticazione PHP, ODBC e Windows
- 11. Come semplificare le chiamate di mappe annidate?
- 12. (Windows) Chiamate API di monitoraggio in C
- 13. 64 bit ODBC Eccezione
- 14. Come posso monitorare una directory di Windows per le modifiche?
- 15. Come trovo le chiamate ai metodi?
- 16. Come parallelizzare le chiamate do() con dplyr
- 17. ODBC ConnectionString
- 18. Ordine di chiamate di metodi in un servizio di Windows
- 19. Posso sincronizzare più chiamate onload di immagini?
- 20. Come eseguire chiamate API Windows in Python 3.1?
- 21. Evita le chiamate ripetute all'interpolazione
- 22. Come funzionano le chiamate AJAX con TWIG
- 23. Come raggruppare le chiamate $ http.get() angolari?
- 24. Come proteggere le mie chiamate JETResult GET?
- 25. Come rendere sequenziali tutte le chiamate AJAX?
- 26. Come concatenare le chiamate Http in Angular2
- 27. Come gestire le chiamate posticipate jquery nidificate
- 28. Come posso intercettare le chiamate ai metodi "magici" di python in nuove classi di stile?
- 29. Chiamate multi-threading nell'applicazione Windows Forms?
- 30. Quali sono le chiamate di sistema/sistema operativo nativo di Windows e Linux eseguite da malloc()?
Grazie per il consiglio, ci avevo pensato. Ho provato a fare una DLL C++ che ha inoltrato tutti i metodi esportati, ma non ho avuto fortuna a farlo funzionare. Qualche buona parola chiave per google? Grazie ancora. – TwoBitsShort
@Christian: assicurati di utilizzare "extern" C "' sulle esportazioni in modo che i nomi non vengano storpiati. Puoi usare 'dumpbin/exports' sulla DLL per assicurarti che non siano decorati. Mi giro un po 'con Google e vedo se riesco a trovare qualcosa. Idealmente, sarebbe bello avere un guscio vuoto che ha tutte le funzioni del punto di accesso definite. ... Sembra che qualcosa di quella natura debba esistere. –
@mark: ho scansionato con dumpbin e poi ho usato i file .def per dichiarare tutte le funzioni esportate. La routine principale fa una loadlibrary del driver orig odbc e ho cambiato il registro per puntare al mio shim dll. Ho anche provato l'approccio pragma. Ogni volta che viene visualizzato un avviso che il driver non supporta il metodo SQLDirectConnectW. DirectConnectW non è nella tabella di esportazione ed è solo una versione Unicode di DirectConnect. Qualche idea? – TwoBitsShort