Ну, я хотел бы получить уникальный идентификатор CPU, чтобы я мог получить идентификацию UNIQUE для каждой машины. Я проверил __cpuid() из библиотеки windows.h, но проблема в том, что идентификатор он получает, это идентификатор всех типов ЦП, если у вас есть процессор I3 Core, и у меня есть основной процессор I3, он даст тот же «Уникальный идентификатор».Уникальный идентификатор CPU в Windows через C++
Вот что я придумал, чтобы сделать CPU ID из __cpuid(), которая возвращает ту же информацию о процессорах одного и того же типа:
std::string GetCPUID(){
int CPUInfo[4] = {-1};
__cpuid(CPUInfo, 0);
if (CPUInfo[0] < 4)
return ""; //Error on retrieving
stringstream st;
for(int i = 0; i <= 3; i++){
st << CPUInfo[i];
}
return st.str();
}
Я также проверил программу под названием «Hardware ID Extractor «это прекрасно работает, на самом деле он возвращает идентификатор UNIQUE CPU как графический интерфейс, как я и хотел, поэтому они предоставили DLL, чтобы мы могли извлечь идентификатор CPU, который он сгенерировал, я пробовал все с помощью самого чистого кода с помощью DLL и следуя их примеру, но кажется, что он ничего не возвращает при работе в Windows 7. многие другие люди жаловались на это в Windows 7 через DLL, даже несмотря на то, что GUI в Windows 7 возвращает правильный идентификатор ЦП.
Показаны свою работу в Hardware ID Extractor,
Вот сайт, где я загружал DLL (Где я выбрал ссылку на C++, VB, .NET): http://www.soft.tahionic.com/download-hdd_id/free-download/free%20download.html
И вот сама DLL скачать: http://www.soft.tahionic.com/download-hdd_id/free-download/DLL%20compressed/HardwareIDExtractorC.dll
Это код, который я получил от Hardware ID Extractor (я использую Visual Studio 2008):
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
int main(){
char* (__stdcall *GetIDESerialNumber)(BYTE);
HINSTANCE DllInst = NULL;
if (DllInst == NULL) DllInst = LoadLibrary("C:\\HardwareIDExtractorC.dll");
printf("LoadLibrary error %d\n", GetLastError());
if (DllInst) {
GetIDESerialNumber = (char* (__stdcall*)(BYTE))GetProcAddress(DllInst, "GetIDESerialNumber");
//Now call the imported function
cout << "SN: " << GetIDESerialNumber(0); // 0 = first IDE hard drive in your system
}else{
printf(" - Not Loaded");
}
_getch();
return 0;
}
В визуальной продукции студии он показывает, что DLL была выполнена, говоря:
'Test.exe': Loaded 'C:\HardwareIDExtractorC.dll', Binary was not built with debug information.
И выход программы, которую я получаю: LoadLibrary error 998 - Not loaded
Кто-то знает, что я могу сделать, чтобы получить CPU ID Unique, как в приложении Hardware ID Extractor? Мне нужно получить идентификатор ЦП, потому что, если я получу информацию о жестком диске, пользователь может отформатировать жесткий диск, и программа перестанет работать, так как я разрабатываю его для работы только с указанным компьютером.
Я использую Windows 7 32 бит Ultimate и Intel I3 Core Processor (если это помогает в любом случае).
Надеюсь, что в моем вопросе был ясен. Спасибо заранее!
Сбой вызова функции LoadLibrary() по какой-либо причине. Можете ли вы добавить код ошибки из GetLastError()? – uesp
cpuid не возвращает уникальный идентификатор процессора, он возвращает возможности ЦП. Кроме того, прочитайте это: http://en.wikipedia.org/wiki/Processor_Serial_Number#Controversy_about_privacy_issues – avakar
Он выбрал ошибку «Ошибка LoadLibrary 998», когда я использовал DllInst = LoadLibrary («C: \\ HardwareIDExtractorC.dll»); \t printf («Ошибка LoadLibrary% d \ n», GetLastError()); – Grego