マシンごとに一意のIDを取得できるように、一意のCPUIDを取得したいと思います。私はwindows.hライブラリから__cpuid()をチェックしましたが、問題はそれが取得するIDであり、それはすべてのタイプのCPUのIDです。I3コアプロセッサを使用していて、I3コアプロセッサを使用している場合は、同じ「一意のID」。
これが、同じタイプのプロセッサで同じ情報を返す__cpuid()から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();
}
また、正常に動作する「ハードウェアIDエクストラクタ」というプログラムを確認しました。実際には、必要に応じてGUIとしてUNIQUE CPU IDが返されるため、DLLが利用可能になり、生成されたCPUIDを抽出できるようになりました。 DLLを使用した最もクリーンなコードとその例に従いますが、Windows 7で実行しても何も返されないようです。Windows7のGUIが正しいCPUIDを返しても、他の多くの人がDLLを介してWindows7でこれについて不平を言っていました。 。
ハードウェアIDエクストラクタで自分の作業を表示します。
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;
}
Visual Studioの出力では、次のように言ってDLLが実行されたことを示しています。
'Test.exe': Loaded 'C:\HardwareIDExtractorC.dll', Binary was not built with debug information.
そして、私が得るプログラム出力は次のとおりです。LoadLibrary error 998 - Not loaded
アプリケーションHardwareIDExtractorのように、CPU IDを一意にするために私ができることを誰かが知っていますか?CPU IDを取得する必要があります。これは、HDD情報を取得すると、ユーザーがハードドライブをフォーマットして、指定されたコンピューターでのみ動作するように設計しているため、プログラムが動作しなくなる可能性があるためです。
私はWindows732ビットUltimateとIntelI3Core Processorを使用しています(それがとにかく役立つ場合)。
私は私の質問で明確だったと思います。前もって感謝します!