2011-07-29 57 views
1

那麼,我只是需要一種方法來獲得Windows ComputerID(基於硬件),一個不會更改的ID或類似的東西,除非您在PC中進行硬件更改,否則不可更改。Qt中的ComputerID

+0

我不知道Qt提供任何此類功能。也許你可以根據MAC地址做一些事情? – Bart

+0

@無需更改硬件即可更改MAC地址。 –

+0

@Kazuma您希望基於哪個硬件ID?處理器?磁盤?內存?網絡接口? GPU? –

回答

1

Qt不提供這樣的功能。您只需從現有硬件(如CPU,已安裝的硬盤和/或MAC地址)計算出此值。這些方法都不能爲您的問題提供完全令人滿意的解決方案。

使用CPU作爲基於硬件的ID,您可以使用匯編程序命令CPUIDhttp://en.wikipedia.org/wiki/CPUID,http://www.sandpile.org/ia32/cpuid.htm提供一些詳細信息。

QByteArray CPU_Vendor_Name() 
{ 
    char Vendor[13]; 

    _asm 
    { 
     // EAX = 0: Get CPU manufacturer 
     XOR EAX, EAX 
     CPUID 

     MOV EAX, EBX 
     MOV Vendor[0], al 
     MOV Vendor[1], ah 
     SHR EAX, 16 
     MOV Vendor[2], al 
     MOV Vendor[3], ah 

     MOV EAX, EDX 
     MOV Vendor[4], al 
     MOV Vendor[5], ah 
     SHR EAX, 16 
     MOV Vendor[6], al 
     MOV Vendor[7], ah 

     MOV EAX, ECX 
     MOV Vendor[8], al 
     MOV Vendor[9], ah 
     SHR EAX, 16 
     MOV Vendor[10], al 
     MOV Vendor[11], ah 
     MOV Vendor[12], 00 
    } 
    return QByteArray(Vendor); 
} 

這將返回所有英特爾處理器的「GenuineIntel」和AMD處理器的「AuthenticAMD」。這是毫無用處的,但通過EAX寄存器中的其他參數,您可以獲得有關處理器的詳細信息(詳細型號,功能等)。您可以使用它來計算一個ID(例如:SHA(Vendor, Model, BrandID, CPUCount))等。但請記住,相同的處理器將始終導致相同的ID。

您可以使用MAC地址(= SHA(Vendor, ..., MAC))來豐富您的ID,但MAC地址可以更改,但平均計算機不太可能頻繁使用。

如果您想要實施某種複製保護,請記住每個複製保護都可能被破解,因此您不應該使用非常複雜的保護來限制您的用戶使用軟件。

0

我意識到這是一篇舊文章,但是我遇到了這個文檔,不得不發佈它,因爲它解釋了CPUID以及從芯片中提取CPU信息的過程。並不是說@沃爾夫岡帕斯奇格在任何方面都不正確。作爲一個新手,他的回答是有道理的,但是一開始我沒有看到一個輕微的抽象層次。也許這可以幫助其他newbs太...這是文件從英特爾:

http://download.intel.com/design/PentiumIII/applnots/24512501.pdf

如果鏈路發生故障或不再可用,搜索英特爾AP-909應用筆記。此外,這種聯繫是有一定的幫助太:

https://software.intel.com/en-us/forums/topic/308483

享受!