[Allegro] 'janas 0' in _endflx.flx + USB-Stift

Bernhard Eversberg ev at biblio.tu-bs.de
Do Feb 4 08:23:15 CET 2010


Heinrich Allers verwendete den Befehl

> janas 0
> 
und wunderte sich, daß dann bei gleichzeitigem Einstecken
eines USB-Stifts der Rechner in Schockstarre verfiel.

Bei "janas 0" passiert folgendes:
Das Programm a99 sendet eine Windows-Systemmeldung aus,
und zwar
    SendMessage(HWND_BROADCAST,WM_TCARD,0,pid);
Eine BROADCAST-Meldung wird, wie der Name schon andeutet,
an alle aktuell laufenden Programme gesendet, darunter
sehr viele, die man gar nicht sieht, z.B. die Dienste
und Treiber. Alle schauen sich diese Meldung an, die meisten
verwerfen sie sofort, weil die Botschaft WM_TCARD fast keinem
etwas sagt. Janas jedoch wertet dann den Parameter pid aus,
das ist die ProcessID von dem a99, aus dem heraus Janas
gestartet wurde. Es könnte ja ein anderes a99-Fenster gewesen
sein, dann reagiert Janas nicht. Sonst erkennt es in dem ersten
Parameter 0 den Befehl, es solle sich beenden.
Warum so kompliziert? a99 kann auf nur mit Hilfe von solchen
Systemmeldungen etwas an Janas übermitteln, denn Janas ist
ein eigenständiges, in keiner Weise direkt mit a99 in Kontakt
stehendes Programm. Die Message WM_TCARD wurde ausgewählt,
weil sie vermutlich eine sehr selten benutzte ist. Mehr dazu:
http://msdn.microsoft.com/en-us/library/bb774307(VS.85).aspx

Denkbar ist jedoch, daß andere Softwerker auf eben diesen
Gedanken verfallen sind, diesen Botschaftstyp für eigene Zwecke
zu entfremden. Denkbar ist, daß dies der Programmierer des
USB-Treibers getan hat. Wenn sein Programm dann diese Botschaft
aufschnappt, aber in einem dafür nicht vorgesehenen Zustand oder
Moment, gerät es womöglich in eine Schleife oder was auch immer,
und legt jedenfalls das System lahm. Das ist eine vage Vermutung,
es genau zu analysieren wäre sehr schwierig.


Entweder müssen wir jetzt eine andere Message einbauen oder aber
die Janas-Dokumentation ergänzen um die Warnung: Wenn der Befehl
"janas 0" auszuführen ist, dann keinesfalls im selben Moment
einen USB-Stick einstecken.


MfG B.E.




Mehr Informationen über die Mailingliste Allegro