Examples Delphi

Technical Information Database
TI475D.txt Getting and setting a disks serial number
Category :General Programming
Platform :All
Product :Pascal All
Description:
The following program shows how to read and write the serial
number on a disk drive. It uses interrupt $21 function $69
and reads the information back and forth into a record with
the following declaration:
TSerPacket = record
Info:Word;
SerNo: Longint;
Vol: Array[1..11] of char;
FileType: Array[1..8] of char;
end;
The first word of the above record should always contain
zero, the second contains the serial number, the third
the volume label and the fourth the FileType, which is usually
either FAT 16 or FAT 12.
When setting a new serial number, the programs first reads the
current information, and then sets the new serial number
and writes it to disk.
The code shown below provides the user with three functions:
GetSerialInfo: Get the current serial number
SetSerialInfo: Set a new serial number
DisplaySerialInfo: Display the information in the current
variable of type TPacket.
Notice that DisplaySerialInfo does not write information
to a disk drive, but only displays that information to
the user via the screen. All of these routines depend
on a global variable of type TSerPacket, which is called
SPacket. It makes no sense to call DisplaySerialInfo
before calling GetSerialInfo.
The drive specification is passed as a number, where
the default drive is zero, drive A is one, drive
B is two, etc.
program SetDiskSer;
{$A+,B-,D+,E+,F-,G+,I+,L+,N-,O-,P-,Q-,R-,S-,T-,V+,X+,Y+}
{$M 16384,0,655360}
type
TSerPacket = record
Info:Word; { Info level always zero }
SerNo: Longint; { Disk }
Vol: Array[1..11] of char;
FileType: Array[1..8] of char;
end;
var
SPacket: TSerPacket;
function GetSerialInfo(Drive: Byte): Byte; assembler;
asm
mov ah, 69h
mov al, 0 { This is where you 1 set serial, 0 to get serial number }
mov bl, 1 { drive number 0 = default, 1 = A, 2 = B , 3 = C }
mov dx, offset [SPacket]
int 21h
end;
function SetSerialInfo(Drive: Byte; SerNo: LongInt): Boolean;
var
S: String;
begin
GetSerialInfo(Drive);
SPacket.SerNo := SerNo;
asm
mov ah, 69h
mov al, 1 { This is where you 1 set serial, 0 to get serial number }
mov bl, Drive { drive number 0 = default, 1 = A, 2 = B , 3 = C }
mov dx, offset [SPacket]
int 21h
end;
end;
procedure DisplaySerialInfo;
var
S: String;
begin
WriteLn('Info level: ', SPacket.Info);
WriteLn('Serial Num: ', SPacket.SerNo);
FillChar(S, SizeOf(S), #0);
Move(SPacket.Vol[1], S[1], 11);
S[0] := #11;
WriteLn('Vol: ', S);
FillChar(S, SizeOf(S), #0);
Move(Spacket.FileType,S[1], 8);
S[0] := #8;
WriteLn('Type: ', S);
end;
begin
SetSerialInfo(1, 12); { One means Drive A, 16 is the serial number }
GetSerialInfo(1);
DisplaySerialInfo;
ReadLn;
end.
Reference: 7/16/98 4:33:45 PM
Trademarks & Copyright © 1998 INPRISE Corporation. Last modified on 8-December-1998.