Ich freue mich, ODBC-Aufrufe entweder direkt vor dem ODBC-Stack oder zwischen dem ODBC-Stack und dem DLL-Treiber für die Verbindung, die ich verwende, zu ändern. Zum Beispiel, wenn die Anwendung eine SELECT, ich möchte in der Lage sein, es zu ändern SELECT_ALL Wie kann ich das tun?Wie kann ich Windows ODBC-Aufrufe abfangen/umschreiben?
Antwort
Die ODBC-Setup-Informationen verweisen auf die Treiber-DLL. Sie können das durch Ihre eigene DLL ersetzen, die über die ODBC-Einstiegspunkte verfügt. Machen Sie einfach alle, die Ihnen egal sind, einfache Aufrufe an die "echte" DLL. Die Eintrittspunkte "execute" und "prepared" können die angegebene Anweisung ändern, bevor sie an die Treiber-DLL übergeben wird.
Wenn Sie beispielsweise einen Benutzer-DSN verwenden, können Sie den Wert in HKCU \ Software \ ODBC.ini \ Datenquellenname \ Driver durch Ihre eigene Shim-DLL ersetzen.
Nach ein bisschen Googeln finde ich kein offensichtliches leeres Shell-Projekt, das ein idealer Ausgangspunkt wäre. Die API reference enthält Details über die API. Im Allgemeinen sollten Sie jedoch keine Informationen von dort benötigen. Sie müssen lediglich die Parameter für jede API an die tatsächliche Treiber-DLL übergeben. Die Funktionsprototypen konnten aus sql.h
und sqlext.h
extrahiert werden.
Eine alternative Methode, die einfacher als das Schreiben einer Shim-DLL wäre, wäre, nur die Funktionen execute und prepare zu haken (wahrscheinlich nur SQLExecDirect und SQLPrepare). This article ist der erste Treffer, den ich dabei sah.
- 1. Wie kann ich Windows-Indexdienst in Windows-Server 2012 verwenden
- 2. Wie kann ich die Windows-Befehlszeile kommentieren?
- 3. Wie kann ich TrueCrypt unter Windows erstellen?
- 4. Wie kann ich Windows Azure Analytics anzeigen?
- 5. Wie kann ich Windows-Daten wie CPU-Auslastung usw. erhalten?
- 6. Wie kann ich inplace bearbeiten (-i) mit Perl auf Windows?
- 7. Wie kann ich die SID des aktuellen Windows-Kontos abrufen?
- 8. Wie kann ich Windows-Treiber entwickeln, die Hardware nicht berühren?
- 9. Wie kann ich ein Windows-Laufwerk in Java mounten?
- 10. Wie kann ich Windows bitten, ein Dokument zu drucken?
- 11. Wie kann ich die MySQL-Datenbank unter Windows sichern?
- 12. Wie kann ich die Windows-Versionsnummer von .NET bekommen?
- 13. Wie kann ich ein Skript in Windows remote ausführen?
- 14. Wie kann ich von Windows Forms zu MySQL verbinden?
- 15. Wie kann ich eine Windows-Anwendung ohne WinMain schreiben?
- 16. Wie kann ich den Anmeldebildschirm für Windows Vista & 7 anpassen?
- 17. Wie kann ich Remote-Debugging für SBT in Windows aktivieren?
- 18. Wie kann ich alle in Windows ausgeführten Prozesse auflisten?
- 19. Wie kann ich die Ubuntu/bin/bash unter Windows
- 20. Wie kann ich den Anzeigenamen meines Windows 8-Publishers ändern?
- 21. Wie kann ich die aktuelle Windows-Sprache von cmd finden?
- 22. Wie kann ich einen Kernel-Treiber-Absturz in Windows debuggen?
- 23. Wie kann ich Hittests in einem Windows Form deaktivieren?
- 24. Wie kann ich Appium Inspector unter Windows ausführen?
- 25. Wie kann ich jupyter Notebook im Hintergrund auf Windows ausführen?
- 26. Wie kann ich Git Credential Manager für Windows deaktivieren?
- 27. Wie kann ich ie (7 ~ 10) in Windows 10 verwenden
- 28. Wie kann ich den Standardbrowser in Windows 10 programmatisch einstellen
- 29. Wie kann ich Heap-Korruptionsfehler unter Windows diagnostizieren?
- 30. Wie kann ich GCC-Compiler unter Windows downgraden?
Danke für den Rat, ich hatte darüber nachgedacht. Ich habe versucht, eine C++ - DLL zu erstellen, die alle exportierten Methoden weiterleitete, hatte aber kein Glück, dass es funktionierte. Irgendwelche guten Schlüsselwörter zum Google? Danke noch einmal. – TwoBitsShort
@Christian: Stellen Sie sicher, dass Sie "extern" C "für die Exporte verwenden, damit die Namen nicht verändert werden. Sie können 'dumpbin/exports' in der DLL verwenden, um sicherzustellen, dass sie nicht dekoriert sind. Ich werde ein wenig mit Google herumstöbern und sehen, ob ich etwas finden kann. Idealerweise wäre es nett, eine leere Shell zu erhalten, die alle definierten Eingangspunkte hat. ... Scheint, als müsste etwas von dieser Art existieren. –
@mark: Ich habe mit Dumpbin gescannt und dann .def Dateien verwendet, um alle exportierten Funktionen zu deklarieren. Die Hauptroutine führt eine Load-Library des orig odbc-Treibers aus und ich ändere die Registrierung, um auf meine Shim-DLL zu zeigen. Ich habe auch den Pragma-Ansatz ausprobiert. Jedes Mal bekomme ich eine Meldung, dass der Treiber die Methode SQLDirectConnectW nicht unterstützt. DirectConnectW ist nicht in der Exporttabelle und ist nur eine Unicodeversion von DirectConnect. Irgendwelche Ideen? – TwoBitsShort