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

王朝vc·作者佚名  2006-01-08
宽屏版  字体: |||超大  

用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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有