如何获得硬盘的序列号,和光盘的序列号。(100分)

C

cqjxnc

Unregistered / Unconfirmed
GUEST, unregistred user!
如何获得硬盘的序列号,和光盘的序列号。谢谢,有高分拿
 
hDevice := CreateFile( '//./Scsi0:', GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );

GetSerialNumber 这个API函数是读盘符卷标的.
 
用汇编语言来实现,代码如下:
type
MIDPtr = ^MIDRec;
MIDRec = Record
InfoLevel: word;
SerialNum: LongInt;
VolLabel: Packed Array [0..10] of Char;
FileSysType: Packed Array [0..7] of Char;
end;

function GetDriveSerialNum(MID: MIDPtr
drive: Word): Boolean
assembler;
asm
push DS { Just for safety, I dont think its really needed }
mov ax,440Dh { Function Get Media ID }
mov bx,drive { drive no (0-Default, 1-A ...) }
mov cx,0866h { category and minor code }
lds dx,MID { Load pointeraddr. }
call DOS3Call { Supposed to be faster than INT 21H }
jc @@err
mov al,1 { No carry so return TRUE }
jmp @@ok
@@err:
mov al,0 { Carry set so return FALSE }
@@ok:
pop DS { Restore DS, were not supposed to change it }
end;

procedure TForm1.NrBtnClick(Sender: TObject);
var
Info: MIDRec;
begin
Info.InfoLevel:=0
{ Information Level }
If GetDriveSerialNum(@Info,0) then { Do something with it... }
ListBox.Items.Add(IntToStr(Info.SerialNum)+' '+Info.VolLabel);
end;
////////////////////////////////////////////////////
BOOL GetVolumeInformation(

LPCTSTR lpRootPathName, // address of root directory of the file system
LPTSTR lpVolumeNameBuffer, // address of name of the volume
DWORD nVolumeNameSize, // length of lpVolumeNameBuffer
LPDWORD lpVolumeSerialNumber, // address of volume serial number
LPDWORD lpMaximumComponentLength, // address of system's maximum filename length
LPDWORD lpFileSystemFlags, // address of file system flags
LPTSTR lpFileSystemNameBuffer, // address of name of file system
DWORD nFileSystemNameSize // length of lpFileSystemNameBuffer
);

 
在98下面可以,在2000,nt下好像还没有看到什么好的方法
 
话题720741的标题是: 紧急求光盘序列号的获得! (0分)
分类:Object Pascal Hell (2001-11-10 9:58:00)
[:(]

Iveny (2001-11-10 9:48:00)
function GetHDSerialNumber(Drv : String): String;
var
VolumeSerialNumber : DWORD;
MaximumComponentLength : DWORD;
FileSystemFlags : DWORD;
begin
if Drv[Length(Drv)] =':' then Drv := Drv + '/';
GetVolumeInformation(pChar(Drv),
nil,
0,
@VolumeSerialNumber,
MaximumComponentLength,
FileSystemFlags,
nil,
0);
Result := IntToHex(HiWord(VolumeSerialNumber), 4) +
'-' +
IntToHex(LoWord(VolumeSerialNumber), 4);
end;



Hell (2001-11-10 9:58:00)
接受答案了.

 
作者?: vkbpl6012
标题?: 读取硬盘的物理序列号
关键字:
分类?: 开发技巧
密级?: 公开
(评分: , 回复: 0, 阅读: 187) »&raquo

98下面如果硬盘不是master的时候就会提示,设备未联接,还要开硬盘的SMART
http://www.delphibbs.com/delphibbs/dispq.asp?LID=446271
的这段
 
顶部