"Frank Gilliland" wrote in message
...
On Sun, 29 Aug 2004 15:34:31 GMT, Lancer wrote in
. com:
On Sun, 29 Aug 2004 01:20:38 -0400, "Leland C. Scott"
wrote:
I didn't use any OS calls at all. The only BIOS functions I used were
direct
calls to read/write absolute disk sectors. Everything else I had to
write
from scratch. As simple as the DOS file system was there was still a lot
to
handle. What made thing more interesting was all I had to work with was
a
Windows 98 machine. That made thing more complicated because Windows
always
wanted to create long file names which messed things up a bit when you
format a disk. I had to put extra routines in to the code to filter that
crap out so when the disk was defragmented I had wiped all the Windows
file
system extensions out, thus generating a valid DOS disk.
Windows 98 runs on a DOS kernel, so all windows 98 systems run on a
"valid" DOS disk. Edit your msdos.sys and turn your GUI off. Or just
make yourself a boot disk and format the drive.
Doesn't it still run on virtual FAT even without the GUI?
Yes it does use a FAT, File allocation Table, to manage the storage space on
the disk. Windows 95, 98 and DOS use it. The storage space is managed as one
or more disk sectors call a "cluster". The cluster number has to be mapped
to absolute disk sectors. The mapping varies depending on the size of the
disk. The FAT is nothing more than a table that maps one cluster to the
next. The file directory entry has the starting cluster number in it. The
way it works is the OS reads the starting cluster number out of the file
directory header. The numeric value points to a sequential entry in the FAT.
The OS then reads that value which again points to another entry in the FAT.
This proceeds until one of several special values is read, one of which
signals the value just read as being the last cluster in the chain. The
numeric value of the entries is also the cluster number of the data stored
on disk. Thus by following the chain of cluster numbers the OS is able to
read the file's data off of the disk in the correct order, even if the
clusters are not in sequential order on the disk. When this mapping gets
screwed up that's when you get messages from the OS about lost or cross
linked "chains". You may get more that one file that have a common cluster
mapped to it which should never happen, crossed linked files, or you have a
chain of clusters on the disk for which there is no file directory entry
with a staring cluster pointing to the beginning of the chain, i.e. lost
chains. The OS tries to clean up the mess by marking the clusters in the
lost chains as being free disk space. For crossed linked files the OS just
picks one file out of the two or more crossed linked and fixes the FAT so
that the cluster(s) in common are mapped to only one file while removing it
from the chain for the other files. There is no guarantee the OS is going to
pick the right file to do this either.
The other thing the FAT table makes hard is file un-deletion and making sure
nobody can read the deleted file's data. When you erase a file all that
happens is the OS makes the file's directory header as being unused by
changing some byte(s) in the header. The starting cluster number is not
zeroed out either. The OS also runs through the file's allocation chain
marking each entry with another of those special values that signals the OS
that the cluster is available for data storage. The actual data in the
cluster is not over written until it is used to hold the data from another
file. It's still there if you use a disk sector viewing utility. That's why
you see those utilities for scrubbing the disk of data from deleted files.
They write random data to the free clusters to make sure anything there is
unreadable.
Un-deleting a file is at best a pain and doesn't always work. The OS can
store the file's data in any available clusters on the disk. There is no
guarantee that the clusters will be used in order, or even sequentially, on
the disk. Thus any file's data that spans more that one cluster you normally
have to help the un-delete utility by looking at the data in the cluster and
deciding if this should be included in the reconstructed FAT chain. If the
data is not in human readable format you're screwed. If you're lucky the OS
tries to allocated the clusters from low to high numbers so the un-deleted
utility may try looking for the next free cluster on the disk assuming that
is was likely used by the file. It does this until the clusters have enough
storage space to hold the data as specified by the file size in the old
directory header. Some times the last method works, and some times it don't.
--
Leland C. Scott
KC8LDO
Wireless Network
Mobile computing
on the go brought
to you by Micro$oft
|