Eindeutige CPU-ID über Windows via C++

Gut, hätte ich gerne eine eindeutige CPU-ID, so dass ich bekommen kann eine EINDEUTIGE Identifizierung für jede Maschine.
Ich habe überprüfen __ - cpuid() aus windows.h-Bibliothek, aber das problem ist, dass die ID, die es bekommt, es ist die ID, die alle Arten von CPU, wenn du einen Core I3 Prozessor und ich haben einen I3 core-Prozessor, es wird die gleiche "Unique ID".

Hier ist was ich kam mit, um eine CPU-ID von der __ - cpuid (), die liefert die gleichen Informationen, die auf Prozessoren des gleichen Typs:

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();

}

Ich auch geprüft, ein Programm namens "Hardware-ID Extractor" das funktioniert gut, eigentlich gibt eine EINDEUTIGE CPU-ID wie die GUI, wie ich wollte, so dass Sie eine DLL, so können wir extrahieren die CPU-ID, die es generiert , ich habe alles versucht mit die sauberste code mit der DLL, und nach Ihrem Beispiel, aber es scheint, dass es gibt nichts zurück, wenn Sie lief unter Windows 7. eine Menge andere Leute beschweren sich über dies auf Windows 7 über die DLL, auch wenn die GUI auf windows 7 gibt die richtige CPU-ID.

Vertretung meiner Arbeit in der Hardware-ID Extractor,

Hier ist der Ort, wo ich heruntergeladen habe die DLL (Wobei ich wählte die Verbindung von C++ -, VB -, .NETTO): http://www.soft.tahionic.com/download-hdd_id/free-download/free%20download.html

Und hier ist die DLL selbst zum download: http://www.soft.tahionic.com/download-hdd_id/free-download/DLL%20compressed/HardwareIDExtractorC.dll

Dies ist der code, den ich bekam von Hardware-ID-Extraktor (ich verwende 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;
}

In das visual studio output es zeigt, dass die DLL ausgeführt wurde, indem Sie sagen:

'Test.exe': Loaded 'C:\HardwareIDExtractorC.dll', Binary was not built with debug information.

Und die Programm-Ausgabe, die ich bekomme, ist: LoadLibrary error 998 - Not loaded

Jemand weiß, was ich tun kann, um eine Eindeutige CPU-ID, wie in der Anwendung der Hardware-ID Extractor? Ich brauche, um eine CPU-ID, weil wenn ich die HDD-Informationen, die Benutzer können Ihre Festplatte formatieren und das Programm aufhört zu arbeiten, wie ich es entwerfen, zu arbeiten, nur, dass die angegebenen computer.

Ich bin mit Windows 7 32 bit Ultimate und Intel Core I3 Prozessor (wenn das hilft sowieso).

Ich hoffe, ich war klar in meiner Frage.
Vielen Dank im Voraus!

Der Aufruf von LoadLibrary() versagt aus irgendeinem Grund. Hinzufügen Sie können, was der Fehler code von GetLastError() ist?
cpuid nicht wieder eine eindeutige id für den Prozessor gibt es CPU-Funktionen. Lesen Sie auch dies: en.wikipedia.org/wiki/...
Es warf Fehler "LoadLibrary error 998", wenn ich DllInst = LoadLibrary("C:\\HardwareIDExtractorC.dll"); printf( "LoadLibrary-Fehler %d\n", GetLastError() );
"CPU-ID, weil wenn ich die HDD-Informationen, die Benutzer können Ihre Festplatte formatieren und das Programm aufhört zu arbeiten, wie ich es entwerfen, zu arbeiten, nur, dass die angegebenen computer." Und was ist, wenn Sie aktualisieren Sie Ihre CPU? Was ist, wenn Sie in einer virtuellen Maschine läuft und ändern virtualization-Pakete? Wenn Sie versuchen, zu implementieren, ein DRM-Schema, nicht...Sie werden einfach erstellen Sie ärger für Ihre legitimen Benutzer. defectivebydesign.org
Haben einige Wert-hinzufügen-Funktion (wie software updates), dass jeder, der wirklich kümmert sich um Ihre software wollen. Benötigen Sie die software registriert werden, um updates von Ihrem server. Wenn Sie bemerken, ungeheuerlich Zugriffe auf eingetragene Dienste von zu vielen stellen in Ihrem Protokoll, senden Sie dem Registranten ein stern E-Mail und/oder abschneiden von updates. In anderen Worten: ausschließen von nicht-zahlenden Personen von einigem Wert, die Sie tatsächlich bieten statt der Gestaltung eines vorsätzlich fehlerhaften Produkt.

InformationsquelleAutor Grego | 2012-04-21

Schreibe einen Kommentar