我的平台是Windows 7(或更高版本),我使用的是Visual 2010。
为了获得唯一的机器标识符,我试图检索mac地址,但遇到了以下问题。
我很难从GetAdapatersInfo方法返回的适配器列表中识别哪个是主以太网适配器。
通过检查以太网适配器的类型(应该是MIB_IF_TYPE_ETHERNET),我可以获得它们的列表。
然而,在我的机器上有多个以太网适配器:实际局域网适配器、Cisco创建的软件适配器、蓝牙以太网适配器等。
根据我与互联网的连接方式,这个列表一直在变化。
那么,我如何知道哪一个是实际的以太网适配器(将使用局域网电缆连接的适配器)。
发布于 2014-04-25 19:02:17
井,
经过一段时间的试验(大约一个月),卷号似乎是生成唯一id的可靠指标,该id在重新引导过程中是持久的,用户不能更改。除非重新格式化磁盘,否则此id不会更改。
下面的代码获取卷号。
int getVolumeNumber(char *volumeNumber, int capacity) {
for(int i=0; i<capacity; i++) {
volumeNumber[i] = '\0';
}
TCHAR volumeName[MAX_PATH + 1] = { 0 };
TCHAR fileSystemName[MAX_PATH + 1] = { 0 };
DWORD serialNumber = 0;
DWORD maxComponentLen = 0;
DWORD fileSystemFlags = 0;
if(GetVolumeInformation(_T("C:\\"), volumeName, ARRAYSIZE(volumeName), &serialNumber, &maxComponentLen, &fileSystemFlags, fileSystemName, ARRAYSIZE(fileSystemName)) != 0) {
sprintf(volumeNumber,"%lu",serialNumber);
return 0;
} else {
return 1;
}}
在上面的代码中,我获取C:驱动器的卷号。
发布于 2015-01-21 13:53:37
“卷号似乎是生成唯一id的可靠度量,该id在重新引导过程中是持久的,用户不能更改。”
此语句的最后一部分(“用户不能更改”)。不是真的。有几个实用程序可以更改或欺骗卷序列号。例如,参见https://www.raymond.cc/blog/changing-or-spoofing-hard-disk-hardware-serial-number-and-volume-id/。根据您的用例,使用硬盘序列号可能会稍微好一些,硬盘序列号由HD制造商提供,用户不能更改(但可以被欺骗)。可以使用Win32_PhysicalMedia类(https://msdn.microsoft.com/en-us/library/windows/desktop/aa394346%28v=vs.85%29.aspx)检索它。
另一种选择可能是枚举所有以太网适配器,对它们进行排序并比较结果--但是您似乎已经研究过这条路。
一般说来,任何可用作个人电脑独特ID的东西都可用于“软件保护”(即防止未经授权使用软件),因此,人们极有可能设法绕过软件保护。
https://stackoverflow.com/questions/22732604
复制相似问题