用VB 如何获取硬盘ID号

chenshaojia 2000-12-21 01:48:00
用 API 的 GetvolueInformation 得到的只是序列号每次格式化后会改变
而硬盘ID号是不变的。
我的目的是用它来加密
...全文
536 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dsc 2000-12-25
  • 打赏
  • 举报
回复
获取硬盘型号、序列号、修订号.....
请访问 http://www.csdn.net/cnshare/soft/soft4806.shtm
wxj_lake 2000-12-23
  • 打赏
  • 举报
回复
http://210.75.132.33/lakes/detail.asp?id=132
不知这个控件行不行,我没有试过,好像有这个功能。
hwmys 2000-12-23
  • 打赏
  • 举报
回复
我遇到过磁盘序列号为“0”的硬盘,这是什么原因?在MS-DOS下键入DIR可看到:Volume Serial Number is 0000-0000 这对加密可是个意外的打击!!!!
DLL文件我也要一份!
zm 2000-12-22
  • 打赏
  • 举报
回复
在VB中好像不可能实现,因为没有具体的API函数,而这需要对硬件进行读写,我这儿有一段C程序可以实现,你可以在VC中编译成dll,然后在VB中调用。
/********************************************************************

idediag

shows characteristics of IDE hard disks.

Public Domain by Paolo Bevilacqua, Rome.

You can add more disk type to the idetypes[]

table, and distribuite freely.

********************************************************************


//* read/write */

#define HDC_DATA 0x1F0

#define HDC_ERROR 0x1F1

#define HDC_SECCOU 0x1F2

#define HDC_SECNUM 0x1F3

#define HDC_CYLLOW 0x1F4

#define HDC_CYLHIGH 0x1F5

#define HDC_SDH 0x1F6

/* read */

#define HDC_STATUS 0x1F7

#define HDC_ALTSTA 0x3F6

/* write */

#define HDC_COMMAND 0x1F7

#define HDC_FIXED 0x3F6

/* commands */

#define HDC_COMMAND_RESTORE 0x10

#define HDC_COMMAND_SEEK 0x70

#define HDC_COMMAND_READ 0x20

#define HDC_COMMAND_WRITE 0x30

#define HDC_COMMAND_FORMAT 0x50

#define HDC_COMMAND_READVER 0x90

#define HDC_COMMAND_DIAG 0x90

#define HDC_COMMAND_SETPAR 0x91

#define HDC_COMMAND_WRSTACK 0xE8

#define HDC_COMMAND_RDSTACK 0xE4

#define HDC_COMMAND_READPAR 0xEC

#define HDC_COMMAND_POWER 0xE0

#define HDC_FIXED_IRQ 0x02

#define HDC_FIXED_RESET 0x04

#define HDC_STATUS_ERROR 0x01

#define HDC_STATUS_INDEX 0x02

#define HDC_STATUS_ECC 0x04

#define HDC_STATUS_DRQ 0x08

#define HDC_STATUS_COMPLETE 0x10

#define HDC_STATUS_WRFAULT 0x20

#define HDC_STATUS_READY 0x40

#define HDC_STATUS_BUSY 0x80

unsigned secbuf[256];

int drive;

struct ideinfo {

unsigned genconf,

fixcyls,

remcyls,

heads,

bytetrack, /* bytes per track */

bytesector, /* bytes per sector */

sectors, /* sectors per track */

byteisg, /* bytes intesector gap */

byteplo, /* bytes in sync */

worduniq; /* words unique status */

char serial[20];

unsigned contype, /* controller type */

bufsiz, /* buffer size in 512 byte blocks */

byteecc; /* ECC bytes trasferred in read/write long */

char firmware[8], /* firmware revision */

model[40]; /* model ID */

unsigned secsint, /* number of sectors transferred per interrupt */

dblword, /* double word transfer flag */

writepro; /* write protect */

};

main() {

int i;

drive = 0;

/* disable interrupt from drive */

outp(HDC_FIXED, HDC_FIXED_IRQ);

/* set up task file parameter */

outp(HDC_SDH, 0xA0 + (drive<<4));

/* issue read parameters */

outp(HDC_COMMAND, HDC_COMMAND_READPAR);

/* read up sector */

/* poll DRQ */

while(inp(HDC_STATUS) & HDC_STATUS_BUSY)

;

/* read up sector */

for (i=0; i<256; ++i)

secbuf[i] = inpw(HDC_DATA);

}
kosisiyo 2000-12-22
  • 打赏
  • 举报
回复
关注!
lbsoft 2000-12-22
  • 打赏
  • 举报
回复
关注
lbsoft 2000-12-22
  • 打赏
  • 举报
回复
TO zm:
有没有现成的DLL,我也要喔,能不能给我一份。
chenshaojia 2000-12-21
  • 打赏
  • 举报
回复
GetVolumeInformation获 得 磁 盘 的 是 序 列 号
我想得到的是硬盘的ID号
shines77 2000-12-21
  • 打赏
  • 举报
回复
精华贴。
playyuer 2000-12-21
  • 打赏
  • 举报
回复
下 面 的 这 个 例 子 是 使 用 GetVolumeInformation获 得 磁 盘 的 序 列 号 :
Private Declare Function GetVolumeInformation Lib _
"kernel32.dll" Alias "GetVolumeInformationA" (ByVal _
lpRootPathName As String, ByVal lpVolumeNameBuffer As _
String, ByVal nVolumeNameSize As Integer, _
lpVolumeSerialNumber As Long, lpMaximumComponentLength _
As Long, lpFileSystemFlags As Long, ByVal _
lpFileSystemNameBuffer As String, ByVal _
nFileSystemNameSize As Long) As Long

Function GetSerialNumber(strDrive As String) As Long
Dim SerialNum As Long
Dim Res As Long
Dim Temp1 As String
Dim Temp2 As String
Temp1 = String$(255, Chr$(0))
Temp2 = String$(255, Chr$(0))
Res = GetVolumeInformation(strDrive, Temp1, _
Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))
GetSerialNumber = SerialNum
End Function
调 用 时 使 用 GetSerialNumber("C:\")就 可 以 了 。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧