home *** CD-ROM | disk | FTP | other *** search
- {
- >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.