Please consider a donation to the Higher Intellect project. See or the Donate to Higher Intellect page for more info.

Finding SSWAPed drives in C

From Higher Intellect Vintage Wiki
Jump to navigation Jump to search
                     Finding SSWAPed drives in C

If Stacker is installed, using the ST_PTR generated by the call to 
the detect_stacker() function as shown in Appendix B of the Stacker version
2 manual, it is possible to determine what drives have been swapped using
SSWAP.  At offset 0x52 from ST_PTR is a signature, which consists of the
four characters 'SWAP'.  Following this four byte signature is a 26 byte
array, which contains the original drive numbers (0=A, 1=B, etc) for all
drives.  Each time SSWAP performs a swap of two drives, it interchanges
the corresponding entries in this array.

Using C notation, the structure is defined as follows:

ST_PTR + 52H --> struct swapmap
                    char swapSignature[4];    /*  'SWAP' */
                    char swapmap[26];

Note that swapmap[i] (where i=0 means A:, i=1 means B:, etc) contains the
"original" drive number for drive i.   That is, drive i was drive swapmap[i]
at boot time.  To find the inverse function (namely, what is the current
drive number of the drive that was drive j at boot time?), you need to search
the swapmap array to find j.  In other words, if swapmap[k]==j, then drive k
was drive j at boot time.