Druckerport Daten mitschneiden (Logger)

Gast #968437
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
Gast #968518
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.
Gast #968539
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.
Persönliche Seite #968625
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" ...
Gast #986183
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?
Persönliche Seite #986506
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren