2009-07-09 2 views
11

Desidero utilizzare alcune funzionalità univoche per un sistema di licenze. Ho deciso di utilizzare ProcessorID dalla classe di gestione Win32_Processor.WIN32_Processor :: Is ProcessorId Univoco per tutti i computer

ho provato su due sistemi differenti con lo stesso tipo di processore ..

Mi mostra stessa per entrambi processorID sistema. Sto usando questo codice

public static String GetCPUId() 
{ 
    String processorID = ""; 

    ManagementObjectSearcher searcher = new ManagementObjectSearcher(
     "Select * FROM WIN32_Processor"); 

    ManagementObjectCollection mObject = searcher.Get(); 

    foreach (ManagementObject obj in mObject) 
    { 
     processorID = obj["ProcessorId"].ToString(); 
    } 

    return processorID; 
} 
+0

Ho lo stesso problema, ma sembra che non ci sia una risposta per questo. Dopo tanti anni, hai trovato la risposta? – qakmak

risposta

16

No, non può essere garantito che sarà unico, come il processore non potrebbe anche sostenere l'istruzione CPUID, nel qual caso, la chiamata non può essere garantita per avere successo .

Inoltre, si sta trascurando che una macchina potrebbe avere più processori al suo interno, quindi non è utile ottenere l'id di un singolo processore.


Come altri hanno indicato, se si vuole ottenere un ID univoco per il sistema, la soluzione migliore è quella di creare un ID che è un amalgama di diversi ID di componente sul sistema.

Un hash (e non una qualsiasi, ma uno che ha molto poche collisioni) di diversi valori di hardware poteva sufficiente. Probabilmente vorresti usare cose che sono abbastanza integrate nel sistema, come il processore, le informazioni della scheda madre, ma non le cose facilmente staccate/modificate, come unità/hub USB/ecc.

+7

quindi cosa dovrei fare ?? quale cosa unica posso ottenere dal sistema? – Mohsan

1

Per la stringa univoca che stai cercando, utilizziamo l'indirizzo MAC. Se l'utente non ha un MAC address, è sufficiente consentire più installazioni. Copre la maggior parte dei casi che è tutto ciò che volevamo ottenere.

+4

L'indirizzo MAC può essere facilmente falsificato. Non è una buona idea. – jyz

+0

@jyz Dipende dal modo in cui si desidera che gli ID siano unici. Un po 'di pirateria del software può essere accettabile se impedisce agli utenti paganti di subire interruzioni del servizio. – pyskell

10

La maggior parte dei sistemi di licenze si basa su più componenti hardware per creare un'impronta digitale. Nessun singolo componente viene utilizzato come unica chiave univoca. Così si potrebbe prendere in considerazione quanto segue:

  • MAC Gli indirizzi di tutte le schede di rete (può diventare difficile se hanno una docking station o attivare/disattivare la loro senza fili su un computer portatile)
  • CPUID componente
  • madre numeri di parte (come i controller IDE o SCSI)
  • numero di serie del drive di sistema (NON ID del volume, che è facile da cambiare)
  • ecc

Se combinati nel loro insieme otterrete una rappresentazione unica della macchina. Il pericolo, naturalmente, arriva quando l'utente cambia qualcosa sulla sua macchina. Perdono la loro licenza? Devono contattarti?

Si noti inoltre che le classi WMI richiedono spesso diritti di amministratore per leggere il tipo di informazioni che si sta cercando, il che sarebbe una vera seccatura per gli utenti di Windows 7 Vista &.

Fare il blocco dell'hardware è molto difficile da ottenere. Quindi consiglierei 1. non farlo o 2. acquistare una libreria commerciale che già lo fa.

+0

Abbiamo usato una combinazione di CPUID e indirizzo MAC per generare un ID univoco, ma sfortunatamente dopo abbiamo scoperto che ci sono tre computer nel nostro ufficio che generano lo stesso id :( –

+0

Se stai usando CPUID e indirizzo MAC sarebbe impossibile Ogni carta di rete viene emessa un ID univoco a livello globale e due schede di rete non riportano lo stesso indirizzo. –

+1

ya, prima di vedere l'accaduto davanti ai miei occhi ho anche pensato che è impossibile che accada ma è successo davvero. –

6

ProcessorID o CPUID servono per identificare il modello e il set di funzioni del processore (ARM, x86/x64).

Il Pentium III supportava un numero di serie del processore (PSN). In addition to only being supported on the Pentium III (and Transmeta's Efficeon and Crusoe processors), il feature had to be enabled in BIOS and raised privacy concerns.

Quindi no, ProcessorID non è univoco per tutti i computer. Inoltre, è molto probabile che non sia univoco tra i computer della tua azienda (poiché molte organizzazioni acquistano più computer dello stesso modello).