加密授权验证学习之二——获取计算机磁盘序列号

这里获取的序列号是卷的序列号,主要用API函数读取。

API函数介绍:

  BOOL GetVolumeInformation(
  LPCTSTR lpRootPathName,                        // 硬盘的路径
  LPTSTR lpVolumeNameBuffer,                    // 硬盘的卷标
  DWORD nVolumeNameSize,                       // 卷标的字符串长度
  LPDWORD lpVolumeSerialNumber,            // 硬盘的序列号
  LPDWORD lpMaximumComponentLength, // 最大的文件长度
  LPDWORD lpFileSystemFlags,                    // 文件系统的一此标志
  LPTSTR lpFileSystemNameBuffer,              // 存储所在盘符的分区类型的长指针变量
  DWORD nFileSystemNameSize                  // 分区类型的长指针变量所指向的字符串长度

);

code:

#include<windows.h>
#include <string>
#pragma comment(lib, "Iphlpapi.lib")

using namespace std;

int main()
{
	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);
	printf("Hard Disk ID Is: %x",VolumeSerialNumber);
	getchar();
	return 0;
}

运行代码就可以得到所需要的卷的序列号了

需要注意的地方:我用的是VS2013编译运行的,有个地方需要改一下才不会报错

找到项目右键选择属性——配置属性——常规——字符集——选择使用多字节字符集。

猜你喜欢

转载自blog.csdn.net/zkz10086/article/details/81506304