본문 바로가기
카테고리 없음

하드디스크 시리얼번호 변경 샘풀

by MonoSoft 2021. 8. 19.
728x90
반응형

하드디스크 시리얼번호 변경 샘풀

 

Re:How can I change serial number of Hard Disk ?

 

Getting and setting a disks serial number - by Borland Developer Support

Staff

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.

 

 

728x90
반응형

댓글