Forum: PC-Programmierung Druckerport Daten mitschneiden (Logger)


von Stefan (Gast)


Lesenswert?

Das Problem:
Ein Programm greift ca 60000 (mit SoftICE und "BPIO 3BC if (bpcount==Anz 
Zugriffe)" herausgefunden) mal auf den Drckerport zu. Ich will einen 
Mittschnitt der Daten.

Kennt jemand von Euch ein Programm mit dem man den Datenverkehr zwischen 
Druckerport und Peripherie mitschneiden kann?
(Wenn möglich ab Win95)
Die Daten sollten kontinuierlich in einem Ringspeicher geschrieben 
werden und nachher in einer Liste lesbar sein. Das Programm sollte im 
Hintergrund mitlaufen und keine anderen Programme behindern.
Ich habe noch kein solches Program gefunden.

Ich fürchte dass ich das Programm selbst zu schreiben habe, deshalb ein 
paar blöde Newbie C++ Fragen:
Wie lese ich den I/O Port 0x3BC in das C++ Programm ein?
Stört das Lesen dieses I/O Registers das andere Programm?
Wie kriege ich ein sauberes Timing des Programms, ich will nicht einmal 
alle 10us auslesen wenn der CPU nix macht und anderstmal wenn der CPU 
Arbeit hat, nur alle 10ms.
Was gibt es ausser M$ VC++ auch andere graphische Oberflächen für win95

Vielen Dank

von *.* (Gast)


Lesenswert?

Evtl. im Emulator laufen lassen. Es gibt eine modifizierte DOSBox in der 
Windows 95 läuft und die auf die parallele Schnittstelle auf Port-Ebene 
zugreifen kann, allerdings nur SPP und kein Interrupt.

von SiO2 (Gast)


Lesenswert?

Normalerweise solltest Du nicht drauf zugreifen können, da ein andres 
Programm den Port schon belegt. Portmonitor kann das mitloggen, er 
klingt sich in den Kernel ein (ka ob das Teil auch bei W95 geht) und 
loggt alles mit.

von guest (Gast)


Lesenswert?

..dürfte nur etwas schwierig werden die Daten auszuwerten, ohne 
Grafiktabelle und ohne Kenntnisse in der Druckersteuerung..

Das wirst du wohl viel zu tun haben

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das geht nur, wenn Du auf Kernelebene die I/O-Zugriffe des betreffenden 
Prozesses abfängst. Mit DOS, Windows 95 und Co. dürfte das nicht einfach 
sein, da diese OS-Surrogate direkte Hardwarezugriffe am Kernel vorbei 
zulassen. Das sieht unter Linux oder Windows NT anders aus (was Windows 
2000, XP und Vista mit einschließt).

Henrik Haftmann hat einen Devicetreiber für einen selbstgebauten 
USB-Parallelportadapter geschrieben, der genau dieses tut, der fängt die 
I/O-Zugriffe auf die I/O-Adressen des Parallelports ab und leitet sie 
via USB an seinen Adapter um.

Diesen Treiber könnte man, wenn man wirklich viel Erfahrung bei der 
Treiberentwicklung hat, als Grundlage für ein Loggerprojekt nehmen.

Was ist die eigentliche Anwendung? Riecht ein bisschen nach "Dongle" ...

von Daniel F. (df311)


Lesenswert?

guckschtu da:
http://download.sysinternals.com/Files/PortMon.zip

damit kannst du die daten von parallel- und seriell-port mitschneiden

von Stefan (Gast)


Lesenswert?

Hallo hier bin ich wieder.

Ich habe mir vor ner Weile VC++ 6.0 gesaugt, auf meine Win95 Kiste 
geladen und ein bisschen mit programmieren gelernt.
Dann habe ich einige Tutorials zum Druckerport gesucht und die 
durchgelesen und am Ende ein kleines Progi geschrieben, was nix anderes 
macht, als immer nur den Port 0x3bc (mit _inp(3bc)) einzulesen und auf 
einem DOS-Fenster auszugeben.
Sobald man aber ein aderes Programm aufruft, bleibt das Programm stehen 
und schneidet erst dann wieder das LPT Register mit, wenn das andere 
Programm fertig ist.
(War eigentlich klar, wollte nur sehen ob der _inp() Befehl tut)

Weiss Jemand wie man in C++ Interrupts einfängt?
Meine Idee ist es den INT 7 zu benutzen, um bei jedem Zugriff auf den 
Druckerport neuen Wert mit einem Programm einlesen zu lassen.
Also das Programm soll bei jedem Interrupt z.B. mit _inp() den Wert aus 
dem 0x3bc Register lesen.

Wie geht das?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das geht gar nicht, weil der betreffende Interrupt weder ausgelöst wird, 
wenn ein Schreibzugriff auf das Register stattfindet, noch Du in einer 
Usermode-Applikation auf Hardwareinterrupts zugreifen kannst.
Das ist Devicetreibern vorbehalten.
Aber, selbst wenn Du einen Devicetreiber schreiben würdest, brächte das 
nichts, weil eben der Interrupt von der Hardware nicht bei 
Schreibzugriffen ausgelöst wird.

Lesezugriffe auf den Port bringen übrigens auch nichts, weil dieser 
nicht die letzten ausgegebenen Daten speichert.

Du wirst nicht umhinkommen, Deine Strategie zu überdenken.
Fang damit an, daß Du Dich darüber informierst, wie die 
Parallelporthardware im PC aufgebaut ist.

Dann kannst Du Dir noch mal meinen Beitrag vom 28.8. durchlesen.

von *.* (Gast)


Lesenswert?

... im Emulator laufen lassen, diesen so umprogrammieren das er die 
Hardwarezugriffe mitschreibt, eine Arbeit die sich schon wer gemacht hat 
...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.