我支持日本供应商的一些软件。他们使用有时间限制的许可证代码来保护他们的软件。该代码仅适用于使用硬件 ID 的特定计算机,该硬件 ID 似乎是使用几个不同的 PC 组件 ID 创建的。
然而,在大约 150 台机器中,有时许可证会停止工作,因为硬件 ID 已更改。
现在他们的软件工具生成了硬件组件的 txt,所以我可以查看之前和之后发生了什么变化。
只选择我可以在我拥有的一个文件中看到的已更改的行...
CurrentClockSpeed : 784
ProcessorId : 178BFBFF00100F63
在另一个..
CurrentClockSpeed : 2800
ProcessorId : 078BFBFF00100F63
如果我将这些处理器 ID 转换为二进制,那么我有...
1011110001011111110111111111100000000000100000000111101100011
和..
0011110001011111110111111111100000000000100000000111101100011
现在我无法访问他们的代码,并且被告知他们认为问题出在硬件上。有人对其进行超频,或者一个 CPU 核心默认退出,导致代码选择另一个核心。
(我可以想象不同的内核可能具有不同且相邻的 id,但 id 预计 LSB 将被更改,而不是 MSB。)
我仍然不相信他们的解释。特别是因为 id 仅改变了 1 位。
这似乎是一个 Get CPUID 调用?如果是这样,不同的内核是否有不同的 ID?即使他们这样做了,这能解释不断变化的 CurrentClockSpeed 吗?
get CPUID 似乎表明它提供了关于线程当前在哪个内核上运行的信息。在 2 核系统上,这是否可以在 2 个值中的 1 个之间有效地随机?
我很高兴对此有任何建议/意见
最佳答案
如果这正是您所担心的,那么将进程的亲和性设置为单个核心就相当简单了。也就是说,如果您是对的,那么他们的许多客户会提示 - 多核系统多年来一直是标准;如果您的系统只有 2 个内核,我会感到非常惊讶。此外,您会在所有计算机上看到这一点。
最终,您需要与之交谈的群体是供应商,而不是堆栈溢出。
关于c++ - 其他人的代码似乎返回了一个不同的 ProcessorID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44520222/