Entwickler-Ecke

Windows API - I/O Adresse Umleiten


markus L - Do 02.09.10 09:02
Titel: I/O Adresse Umleiten
Hallo,
ist es möglich unter W2K und höher eine Art treiber zu erstellen,
mit dem man zugriffe auf I/O Adressen umleiten kann.

In der art so etwas wie Direct IO, aber halt mit umleitung.

Hintergrund, eine Applikation (kein Quellcode vorhanden) die unter Win9x auf den RS232 Port zugreift auf
einem XP rechner (Laptop) mit einem USB RS232 Adapter Lauffähig zu machen. (Keine HW RS232 Vorhanden)

wo setzt man am besten da an ?.

MfG
Markus


Reinhard Kern - Do 02.09.10 12:55

user profile iconmarkus L hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,
ist es möglich unter W2K und höher eine Art treiber zu erstellen,
mit dem man zugriffe auf I/O Adressen umleiten kann.
...


Hallo,

da stehen 2 Probleme im Weg: erstens werden im Anwendermodus keine I/O-Befehle ausgeführt, und zweitens ist die Hardware des Adapters u.U. ganz anders aufgebaut als die PC-Standard-Comschnittstelle. Das erste Problem lässt sich nur durch Treiber-Programmierung lösen, Treiber dürfen was der Anwender nicht darf.

Gegen mangelnde Register-Kompatibilität hilft nur eine Art doppeltes Re-Engeneering, wenn überhaupt: man muss nicht nur das Programm rückübersetzen, sondern man muss auch herausfinden, was der Programmierer mit dem Befehl "setze Bit x in I/O-Register Y" eigentlich bezweckt hat. Soll damit etwa RTS gesetzt werden, kann man das durch den entsprechenden WIN32-API-Aufruf ersetzen. Wenn es den aber nicht gibt, scheitert das Ganze. Mühsam ist es in jedem Fall.

Gruss Reinhard


markus L - Do 02.09.10 13:38

Hallo,

sehe schon scheint mir recht Arbeitsintensiv zu sein ;-).
Es geht eigendlich nur um die RXD TXD Leitung, HW Handshake o.ä. wird nicht benutzt.

Danke

Gruß
Markus


SAiBOT - Do 02.09.10 23:33

Das hier habe ich irgendwo mal gefunden, könnte dir behilflich sein.


Reinhard Kern - Do 02.09.10 23:53

user profile iconmarkus L hat folgendes geschrieben Zum zitierten Posting springen:

Es geht eigendlich nur um die RXD TXD Leitung, HW Handshake o.ä. wird nicht benutzt.


Hallo,

auch dann muss erst mal Baudrate, Länge, Parity usw. gesetzt werden, auch No handshake ist eine Handshake-Spezifikation. Als erstes solltest du eine Liste erstellen, welche I/O-Adressen benutzt werden.

Gruss Reinhard


BenBE - Fr 03.09.10 16:05

Alternativ bliebe noch die Variante (ist übrigens in dem Fall erlaubt), das betroffene Programm in Bezug auf seine Treiber-Schnittstelle (also der Teil, der die Hardware ansteuert) zu reverseengineeren und durch einen InProcess-Patch durch eine Weiterleitung an eine externe DLL zu emulieren. Wenn die IO-Funktionalität gut separiert in einer eigenen DLL liegt, hat man hier sogar ein recht einfaches Spiel, da man nur die DLL-Schnittstelle verstehen und erneut umsetzen muss.


ssb-blume - Sa 04.09.10 09:28

Hallo,
geht ganz einfach über Filestream, anbei Quellen und Testprogramm

Viel Erfolg,
Hansi