[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]
{
jimisola.laursen@cindy.ct.se (jimisola laursen)
> Anybody know how to read the Volume Serial Number from a (hard) disk??
> No problem getting the Volume Label, but this seemsa to be another matter...
}
Unit Serial;
Interface
Uses
Dos;
Function Get_Serial_number(Drive : Byte) : String;
Implementation
Asm
mov ax, w
mov bx, b
xor cx, cx
les di, @result
xor si, si
jcxz @@@20
@@@10:
xor dx, dx
div bx
cmp dl, 10
jb @h10
add dl, 'A'-10
jmp @h20
@h10:
or dl, '0'
@h20:
push dx
inc si
loop @@@10
@@@20:
inc cx
or ax, ax
jnz @@@10
mov cx, si
jcxz @@@40
cld
mov al, cl
stosb
@@@30:
pop ax
stosb
loop @@@30
@@@40:
end;
Function Get_Serial_number(Drive : Byte) : String;
(* "Drive" is 0=current, 1=A:, 2=B: osv.. *)
Type
Disk_info = Record
RES : Word; (* reserverad ska Vara 0 *)
SER_NR1 : Word; (* Serinummer (bin{rt) *)
SER_NR2 : Word; (* Serinummer (bin{rt) *)
VOL : Array [1..11] of Char;(* Volume Label *)
TYP : Array [1..8] of Char; (* tex 'FAT12' eller 'FAT16' *)
end;
Var
D_I : Disk_Info;
s1, s2 : String[5];
begin
Asm
push ds
mov ax,ss
mov ds,ax
lea dx,D_I
mov bl,drive
mov ax,6900h
int 21h
pop ds
end;
s1 := NumAscii(D_I.SER_NR2, 16);
s2 := NumAscii(D_I.SER_NR1, 16);
While length(s1) < 4 do
s1 := '0' + s1;
While length(s2) < 4 do
s2 := '0' + s2;
Get_Serial_number := s1 + '-' + s2;
end;
end.
[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]