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

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 sunyuzhe114 的 blog

用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
      

 

本文关键:硬盘的序列号
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top