[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]
{
>Who can give me the source code in TP 6.0 which reads a HardDisks Volume
>Serial Number ?
Starting With Dos 4 this inFormation can be GET/SET using inT 21h func 69h
Entry AH =69h
Al = 00h Get Serial number and Label
Al = 01h Set Serial number
BL = drive number 0=default, 1=A: .....)
DS:DX Pointer to a 24 Bytes Buffer (see below)
Return
Cf set on error
AX = error code (same as Int 21h AH = 59 )
CF Clear if Ok
if AL was 0 then Buffer is filled with
offset size Contents:
0 Word 0
2 DWord the disk Serial number
6 11 Bytes= volume Label or "NO NAME"
16 8 Bytes = 'FAT12' or 'FAT16'
The buffer is actually a copy of ByteS $27 to $3D of the Sector 0 of the disk
So With previous versions of Dos one should be able to do an Absolute read
of sector 0 from the disk and extract the Info from a buffer. I did not dare
doing it....
Last Thought: With Dos earlier than 4 , there was no disk serial number
so what the point looking For one .... !!!!
Although this info can be used to set one ???
(not by me... I need too badly my hard disk to
experiment With Int 13h ..... )
Here is a Program that Get these Infos...
I did not dare trying the Set Function (AL=1...) see above...
}
Program GetSerial;
Uses
Dos;
Var
Buffer : Array[0..23] of Byte;
R : Registers;
Serial : LongInt;
VLabel : String[11];
Fat : String[8];
begin
R.AH := $69;
R.AL := 0;
R.BL := 3; { C: Drive }
R.DS := Seg(Buffer);
R.DX := ofs(Buffer);
Intr($21,R);
if (R.Flags and Fcarry = 0) then
begin
Move(Buffer[2], Serial, Sizeof(LongInt));
Move(Buffer[6], VLabel[1], 11);
VLabel[0] := Char(11);
Move(Buffer[16], Fat[1], 8);
Fat[0] := Char(8);
end;
Writeln(VLabel);
Writeln(Fat);
readln;
end.
[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]