mikrocontroller.net

Forum: PC-Programmierung Druckerport Daten mitschneiden (Logger)


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: *.* (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: SiO2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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" ...

Autor: Daniel F. (df311)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
guckschtu da:
http://download.sysinternals.com/Files/PortMon.zip

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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: *.* (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.