[Back to DRIVES SWAG index]  [Back to Main SWAG index]  [Original]

{
 In the thread concerning copy protection (in which I have no
 interest) the serial number of a disk was mentioned.
 How can this be read from TP? Can it be changed other than
 by re-Formatting? I can't find any reference to serial number
 in the Dos 5.0 users guide except a passing one in the section
 on the ForMAT command.

Reading the volume id number is no problem:

reads volume id number -- not sophisticated enough to
determine whether disk was Formatted With a Dos version
new enough to assign volume id }

Uses Dos;

Function Byte2HexSt(b : Byte) : String;
Const
  hexChars: Array [0..$F] of Char =
    '0123456789ABCDEF';
begin
  Byte2HexSt := hexChars[b shr 4] + hexChars[b and $F];
end;

Procedure ResetDisk(DriveNo : Byte);
Var
  reg : Registers;
begin
  reg.ah := 0;        { bios Function reset drive system }
  reg.dl := DriveNo;
  intr($13,reg);
end;

Function VolIDSt(DriveCh : Char) : String;
{ returns Volume ID number as a String of hex digits }
Var
  reg : Registers;
  try : Integer;
  buff : Array[0..1023] of Byte;
begin
  DriveCh := upCase(DriveCh);
  try := 0;
  Repeat
    reg.ax := $0201;  { ah = bios Function read disk sector }
                      { al = read 1 sector }
    reg.cx := $0001;  { ch = cylinder number }
                      { cl = sector number }
    reg.dh := 0;      { head number }
    reg.dl := ord(DriveCh) - 65;  { drive number }
    reg.es := seg(buff);
    reg.bx := ofs(buff);
    intr($13,reg);
    inc(try);
    if reg.flags and FCarry <> 0 then ResetDisk(reg.dl);
  Until ((reg.flags and FCarry) = 0) or (try = 3);
  if reg.flags and FCarry <> 0
    then VolIDSt := 'Error attempting to read volume ID number'
    else VolIDSt := Byte2HexSt(buff[$2A]) +
                    Byte2HexSt(buff[$29]) + '-' +
                    Byte2HexSt(buff[$28]) +
                    Byte2HexSt(buff[$27]);
end;

{
Can the volume id number be changed?  You bet.

Although it is True that DISKCOPY will not copy the volume id
number from the original disk, it's still a pretty weak basis For a
copy protection scheme.  I consider myself a pretty unsophisticated
Programmer, but it only took me a few minutes of fooling around to
figure out where the volume id number is on the disk.  then all you
have to do is grab an interrupt reference and quickly Type up some
code to read and Write to the right spot on the disk.
}

[Back to DRIVES SWAG index]  [Back to Main SWAG index]  [Original]