用api函数读取硬盘的序列号 (转)

用api函数读取硬盘的序列号 (转)[@more@]

api函数读取硬盘的序列号

在写程序时我们想对每一台计算机都生成一个唯一的标识,而且在一此共享软件中我们也看到,软件在不同的机器上生成了不同的标识,这是如何实现的呢,其实是软件有一部分程序读取了,本地计算机的一部分硬件参数(如硬盘序列号,网卡序列号等等),再通过一系列算法而得到了一个唯一标识,其实我们也可以通过一个api函数生成我们的唯一标识,由于硬盘人人都有,而网卡不一定每个人都有,所以以读硬盘序列号为例,
下面就先介绍一下我们要用到的api函数
 BOOL GetVolumeInformation(
  LPCTSTR lprootPathName,  // 硬盘的路径
  LPTSTR lpVolumeNameBuffer,  // 硬盘的卷标
  Dword nVolumeNameSize,  // 卷标的字符串长度
  LPDWORD lpVolumeSerialNumber,  // 硬盘的序列号
  LPDWORD lpMaximumComponentLength, // 最大的文件长度
  LPDWORD lpFileSystemFlags,  // 文件系统的一此标志
  LPTSTR lpFileSystemNameBuffer,  // 存储所在盘符的分区类型的长指针变量
  DWORD nFileSystemNameSize  // 分区类型的长指针变量所指向的字符串长度
);
如果上述函数成功就返回一个非0值。

光说不做,是不行了,我们还得实践一下:// 最大的文件长度
首选用MFC AppWizard建立一个基于Dialog base的对话框工程,名为GetHardID,点击finish。
加一个按钮,双击它,点击ok,并在对应的函数中加入如下代码:
 LPCTSTR lpRootPathName="c:"; //取C盘
 LPTSTR lpVolumeNameBuffer=new char[12];//磁盘卷标
 DWORD nVolumeNameSize=12;// 卷标的字符串长度
 DWORD VolumeSerialNumber;//硬盘序列号
 DWORD MaximumComponentLength;// 最大的文件长度
 LPTSTR lpFileSystemNameBuffer=new char[10];// 存储所在盘符的分区类型的长指针变量
 DWORD nFileSystemNameSize=10;// 分区类型的长指针变量所指向的字符串长度
 DWORD FileSystemFlags;// 文件系统的一此标志
 ::GetVolumeInformation(lpRootPathName,
 lpVolumeNameBuffer, nVolumeNameSize,
 &VolumeSerialNumber, &MaximumComponentLength,
 &FileSystemFlags,
 lpFileSystemNameBuffer, nFileSystemNameSize);
 
 CString str;
 str.Format("Seria Num is %lx ",VolumeSerialNumber);
 AfxMessageBox(str);
 
编译,链接并运行程序,单击按钮,在弹出的对话框中就是我们要的序列号。
对不对我们验证一下,进入dos窗口,打入"dir c:/p"命令,怎么样是不是和我们的程序显示的一模一样
这样我们就在功告成了。

 


 
 EMail:sunyuzhe@263.NET
 主页:http://sunyuzhe.363.net
 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10796304/viewspace-952025/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10796304/viewspace-952025/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值