频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者: 出处:巧巧读书 2006-11-01 进入讨论组


在写程序时我们想对每一台计算机都生成一个唯一的标识,而且在一此共享软件中我们也看到,软件在不同的机器上生成了不同的标识,这是如何实现的呢,其实是软件有一部分程序读取了,本地计算机的一部分硬件参数(如硬盘序列号,网卡序列号等等),

再通过一系列算法而得到了一个唯一标识,其实我们也可以通过一个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"命令,怎么样是不是和我们的程序显示的一模一样
这样我们就在功告成了。

静态页面:http://www.qqread.com/vc/d257480.html 更多文章 更多内容请看硬盘维护与数据恢复专区话说硬盘知识带你认识硬盘知识专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
较早的文章:关于文件拷贝

较新的文章:隐式链接无.LIB动态链接库
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章