2011-01-03 8 views
4

Ich brauche irgendwelche Informationen zu erhalten, eine Maschine zu identifizieren und was ich bisher wurde mit wurde der folgende:Sicherste Weise Prozessor-ID oder eine Hardware-Informationen zu erhalten

internal static string GetProcessorId() 
    { 
     try 
     { 
      StringBuilder sb = new StringBuilder(); 
      using (System.Management.ManagementClass theClass = new System.Management.ManagementClass("Win32_Processor")) 
      { 
       using (System.Management.ManagementObjectCollection theCollectionOfResults = theClass.GetInstances()) 
       { 
        foreach (System.Management.ManagementObject currentResult in theCollectionOfResults) 
        { 
         sb.Append(currentResult["ProcessorID"].ToString()); 
        } 
       } 
      } 
      return sb.ToString(); 
     } 
     catch (Exception exception) 
     { 
      Console.WriteLine(exception.Message); 
      return ""; 
     } 
    } 

Aber wenn ich laufe dies auf Windows XP (von einer virtuellen Maschine) ist meine currentResult["ProcessorID"]null. Ich bin mir nicht sicher, ob es weil ich eine virtuelle Maschine benutze, aber es könnte sein, weil XP ist. Jedenfalls vertraue ich diesem Code nicht sehr. Ist es sicher genug? Soll ich einen Computer auf andere Weise bekommen? Dies ist alles Teil eines Lizenzierungssystems, das ich entwickle.

+1

Mögliche duplizieren: http://stackoverflow.com/questions/1101772/win32-processoris-processorid-unique-for-all-computern Ich weiß für eine Tatsache, dass "ProcessorID" nicht auf VMWare unterstützt wird. –

+0

@Cody Gray: Meinst du, VMWare emuliert den Intel CPUID Befehl nicht? Oder meinst du die hartcodierte ID, die jeder Intel-Prozessor angeblich hat (die im BIOS abgeschaltet werden kann ...) – JimR

+0

@JimR: Ja. Ich meine, dass, wie die Frage beschreibt, der zurückgegebene Wert "null" ist. Weitere Informationen finden Sie unter [this thread] (http://forums.virtualbox.org/viewtopic.php?f=2&t=26178) in deren Foren. –

Antwort

6

Für ein kleines Tool, das ich schrieb (Windows Forms .NET 2.0), brauchte ich etwas ähnliches.

Ich schrieb eine helper class, die einfach einige allgemeine Informationen wie HDD Seriennummer über PInvoke der GetVolumeInformation Funktion verwendet.

Dies ist auf keinen Fall wirklich sicher oder kugelsicher, aber genau genug, um meine Bedürfnisse zu erfüllen.

(Wenn Sie interessiert sind, ist this das Werkzeug, wenn ich darf verknüpfen)

+1

Aus reiner Neugier, warum benötigt freie Software eine Möglichkeit, einen Computer eindeutig zu identifizieren? Ich bin mir nicht sicher, ob ich diese Art von Dingen mag, um Lizenzvereinbarungen durchzusetzen, aber ich verstehe nicht einmal den Sinn der Software, mit der Sie verbunden sind. –

+5

Gute Frage :-) Es ist ein Tool zum Hochladen von Dateien (wie YouSendIt). Zu Beginn musste sich ein Benutzer mit seinem Benutzernamen und Passwort anmelden. Einige Kritiker haben das nicht gemocht. Also habe ich die Hardware-ID eingeführt und die anonyme Nutzung des Tools aktiviert. Dies ermöglicht es einem Benutzer, jederzeit seine Geschichte von anonym zu einem registrierten Benutzer zu wechseln, wenn er möchte. Fazit: Es ist ein Mechanismus zum Erzeugen eines eindeutigen Schlüssels in der Upload-History-Datenbank auf dem Server. –

+1

Danke für die ehrliche Erklärung. Das macht Sinn. –

3

Auch wenn es funktionierte, würde es nicht tun, was Sie wollen. Die ProcessorID gibt Ihnen eine Identifikation des Prozessprodukts (Pentium X mit den Features Y und Z), nicht die spezifische Instanz der CPU. Es wird so beschrieben:

Prozessorinformationen, die Prozessoreigenschaften beschreibt. Bei einer x86 Klassen-CPU hängt das Feldformat von der Prozessorunterstützung der Anweisung CPUID ab. Wenn die Anweisung unterstützt wird, enthält die Eigenschaft 2 (zwei) DWORD-formatierte Werte. Der erste wird ein Offset von 08h-0Bh, die der EAX-Wert ist, dass ein CPUID-Befehl kehrt mit Eingangs EAX auf 1 gesetzt Die zweite ist ein Offset von 0Ch-0Fh, die der EDX-Wert ist, dass die Anweisung kehrt zurück. Nur die ersten beiden Bytes der Eigenschaft sind signifikant und enthalten den Inhalt des DX-Registers bei CPU-Reset-alle andere sind auf 0 (Null) gesetzt, und die Inhalte sind im DWORD-Format.

Die IBM PC-Hardware hat keine fälschungssichere Hardwareidentifikation.

+1

In diesem Fall, was würden Sie verwenden, um eine eindeutige konsistente ID für einen PC zu generieren? – Smith

Verwandte Themen