Qt не предоставляет такой функциональности.Все, что вы можете сделать, это рассчитать такое значение из существующего оборудования, такого как ЦП, установленные жесткие диски и / или MAC-адрес.Ни один из этих подходов не дает полностью удовлетворительного решения вашей проблемы.
Использование ЦП для аппаратного идентификатора вы можете использовать командой Ассемблера CPUID
: http://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» для всех процессоров Intel и «AuthenticAMD» для процессора AMD.Это совершенно бесполезно, но с другими параметрами в регистре EAX вы получаете подробную информацию о процессоре (подробную модель, функции и т. Д.).Это можно использовать для вычисления идентификатора (например: SHA(Vendor, Model, BrandID, CPUCount)
) и т. Д. Но имейте в виду, что один и тот же процессор всегда будет приводить к одному и тому же идентификатору.
Вы можете дополнить свой идентификатор MAC-адресом (= SHA(Vendor, ..., MAC)
), но MAC-адрес можно изменить, хотя маловероятно, что средний компьютер будет делать это часто.
Если вы хотите реализовать какую-либо защиту от копирования, помните, что каждая копияЗащита может быть взломана, поэтому вы не должны наказывать своих пользователей очень сложной защитой, которая ограничивает использование вашего программного обеспечения для них.