我的平台是Windows 7(或更高版本),我使用的是Visual Studio 2010。
在尝试获取唯一的机器标识符时,我试图检索mac地址,但我遇到了以下问题。
我很难从GetAdapatersInfo方法返回的适配器列表中识别哪个是主要的以太网网络适配器。
我可以通过检查其类型来获取以太网适配器列表(它应该是MIB_IF_TYPE_ETHERNET)。
但是,我的机器上有多个以太网适配器:实际的LAN适配器,思科创建的软件适配器,蓝牙以太网适配器等。
根据我连接到互联网的方式,此列表不断变化。
那么,我怎么知道哪一个是实际的以太网适配器(将使用LAN电缆连接的那个)。
答案 0 :(得分:2)
那么,
在试验了一段时间(大约一个月)后,卷号似乎是一个可靠的度量标准,用于生成唯一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:驱动器的卷号。
答案 1 :(得分:0)
&#34;卷编号似乎是一个可靠的度量标准,用于生成唯一ID,该ID在重新启动后保持不变,并且无法由用户更改。&#34;
本声明的最后一部分(&#34;用户无法更改。&#34;)不正确。有几个实用程序可以更改或欺骗卷序列号。 请参阅示例https://www.raymond.cc/blog/changing-or-spoofing-hard-disk-hardware-serial-number-and-volume-id/。 根据您的使用情况,您可能稍微使用硬盘序列号,这是由HD制造商提供的,用户无法更改(但 CAN 被欺骗)。可以使用Win32_PhysicalMedia类(https://msdn.microsoft.com/en-us/library/windows/desktop/aa394346%28v=vs.85%29.aspx)检索它。
另一种选择可能是枚举所有以太网适配器,对它们进行排序并比较结果 - 但似乎你已经调查了这条道路。
通常,任何可以用作PC的唯一ID的东西都可以用于&#34;软件保护&#34; (即防止未经授权使用软件),因此很可能人们试图找到绕过它的方法。