STOP dem Cartridge-Klau

Auch auf der diesjährigen Atari-Messe werden wieder viele Anbieter mit Wechselplatten ausgestattet sein. Kein Wunder, denn so lassen sich auch größere Datenmengen leicht transportieren, und die Cartridge kann nach dem Ende einer Demonstration an einem sicheren Ort aufbewahrt werden. Was aber, wenn ein Unbefugter mal schnell den Auswurfknopf betätigt und die Cartridge mitgehen läßt?

Diese Situation ist sicherlich für viele ein Alptraum. Selbst wenn sich keine wirklich wichtigen Daten auf dem Medium befinden (Backups sollten anderweitig vorhanden sein), ist der Cartridge-Verlust zumindest aus finanzieller Sicht ärgerlich. Dem Diebstahl eines Mediums kann jedoch sehr wirkungsvoll vorgebeugt werden. Eine Wechselplatte erlaubt es nämlich, den Auswurfknopf per Software zu verriegeln. In diesem Fall ist ein Entnehmen der Cartridge unmöglich. Wird der Auswurfknopf betätigt, läßt sich die Platte in keiner Weise beeinflussen. Verspürt man irgendwann den Wunsch, die Cartridge zu entnehmen, läßt sich der Auswurfknopf natürlich auch wieder entriegeln.

Besitzt man einen Festplattentreiber, der die XFIDI-Spezifikation (s. hierzu „Schoner für die Festplatte“, ebenfalls in dieser Ausgabe) erfüllt, so läßt sich dieses Vorhaben leicht realisieren. Der XHDI-Aufruf XHLock() erlaubt das treiberunabhängige Ver- und Entriegeln des Auswurfknopfes. Nachdem mit XHInqTarget() festgestellt wurde, bei welcher Platte es sich um eine Wechselplatte handelt, lassen sich alle Cartridges verriegeln. Hierzu dient LOCK.PRG, wogegen UNLOCK.PRG die Verriegelung wieder aufhebt.

Da sich beide Programme lediglich durch einen Parameter beim XHLock()-Aufruf unterscheiden, gibt es nur ein Programm-Listing. Je nachdem, welche Programmversion benötigt wird, muß einer der beiden MODE-Definitionen am Anfang des Listings auskommentiert werden. Das Programm überprüft übrigens nicht, ob sich zwei logische Laufwerke auf dem gleichen physikalischen Device befinden, so daß es durchaus Vorkommen kann, daß der XHLock() für eine Platte mehrmals abgesetzt wird. Dies hat jedoch keine nachteilige Wirkung.


*****************************************
*                                       *
*             LOCK/UNLOCK V1.00         *
*                                       *
* Ver- oder entriegelt den Auswurfknopf *
*  von Wechselplatten unter Verwendung  *
*       des XHDI-Protokolls             *
*                                       *
*               by Uwe Seimet           *
*                                       *
*          (c) 1992 MAXON Computer      *
*****************************************

*MODE-Parameter je nach Bedarf auskommentieren 
*MODE   = 0             ;Cartridge freigeben
MODE    = 1             ;Cartridge verriegeln


GEMDOS  = 1

XBIOS   = 14
SUPEXEC = 38

_p_cookies = $5a0

XHInqTarget = 1 
XHLock      = 3
XHDrvMap    = 6 
XHInqDev    = 7
XHDIMAGXC   = $27011992 

        text

        pea act(pc)
        move #SUPEXEC,-(sp)
        trap #XBIOS
        addq.l #6,sp
        clr -(sp)
        trap #GEMDOS

act:
        move.l _p_cookies,d0        ;keine
        beq quit                    ;cookies-
        move.l d0,a0 
noxhdi: movem.l (a0)+,d0/a6
        tst.l d0                    ;kein
        beq quit                    ;XNDI-
        cmp.l #"XHDI",d0 
        bne noxhdi
        cmp.l #XHDIMAGIC,-4(a6) 
        bne noxhdi

        move #XHDrvMap,-(sp)        ;Gerätevektor
        jsr (a6) ;holen
        addq.l #2,sp 
        move.l d0,d6

        moveq #0,d7
loop:   btst d6,d7                  ;kein XHDI
        beq.s noxdev                ;Device-

        clr.l -(sp) 
        clr.l -(sp) 
        pea minor 
        pea major 
        move d7,-(sp)
        move #XHInqDev,-(sp)        ;Gerätenummern
        jsr (a6)                    ;holen
        lea 20(sp),sp 
        tst d0
        bmi.s noxdev

        clr.l -(sp) 
        pea flags 
        clr.l -(sp)
        move minor,-(sp)

        move major,-(sp)
        move #XHInqTarget,-(sp)
        jsr (a6)
        lea 18(sp),sp
        tst d0
        bmi.s noxdev
        btst #2,flags+3             ;kann Gerät
                                    ;verriegelt 
                                    ;werden?
        beg.s noxdev                ;nein-
        tst.l flags                 ;Gerät ist
        bmi.s noxdev                ;reserviert-

        clr -(sp)                   ;Dummy-Key
        move #MODE,-(sp)            ;Cartridge
        move minor,-(sp)            ;sperren oder
        move major,-(sp)            ;entriegel
        move #XHLock,-(sp)          ;(gemäß MODE)
        jsr (a6) 
        lea 10(sp),sp

noxdev: addq #1,d7
        cmp #32,d7                  ;nächstes
        bne loop                    ;Device-

quit:   clr -(sp)
        trap #GEMDOS


        bss

flags:  ds.l 1

major:  ds.w 1

minor:  ds.w 1


Uwe Seimet
Aus: ST-Computer 09 / 1992, Seite 84

Links

Copyright-Bestimmungen: siehe Über diese Seite