2009-07-09 12 views
11

Quiero utilizar algo exclusivo para un sistema de licencias. Decidí usar ProcessorID de la clase Win32_Processor Management.WIN32_Processor :: Is ProcessorId Único para todas las computadoras

He intentado en dos sistemas diferentes con mismo tipo de procesador ..

Me demuestra misma processorID tanto para el sistema. Estoy utilizando el código

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

Tengo el mismo problema, pero parece que no hay una respuesta para esto. Después de tantos años, ¿encontraste la respuesta? – qakmak

Respuesta

16

No, no se puede garantizar que va a ser único, ya que el procesador no podría incluso apoyar la instrucción CPUID, en cuyo caso, la llamada no puede ser garantizado para tener éxito .

Además, se está descuidando que una máquina pueda tener procesadores múltiples, por lo que obtener la identificación de un solo procesador no ayuda.


Como otros han indicado, si se desea obtener un identificador único para el sistema, lo mejor es crear un id que es una amalgama de varias identificaciones de los componentes en el sistema.

Un hash (y no uno cualquiera, sino uno que tiene muy pocas colisiones) de varios valores del hardware podía suficiente. Probablemente desee utilizar cosas que están bastante integradas en el sistema, como el procesador, la información de la placa base, pero no cosas fácilmente extraíbles/cambiadas, como unidades USB/concentradores/etc.

+7

Entonces, ¿qué debo hacer? ¿Qué cosa única puedo obtener del sistema? – Mohsan

1

Para la cadena única que está buscando, utilizamos la dirección MAC. Si el usuario no tiene un MAC address, simplemente permitimos varias instalaciones. Cubre la mayoría de los casos, que es todo lo que queríamos lograr.

+4

La dirección MAC se puede falsificar fácilmente. No es Buena idea. – jyz

+0

@jyz Eso depende de qué tan único desee que sean las ID. Un poco de piratería de su software puede ser aceptable si evita que los usuarios que pagan sufran interrupciones del servicio. – pyskell

10

La mayoría de los sistemas de licenciamiento se basan en múltiples componentes de hardware para crear una huella digital. No se utiliza ningún componente como la única clave única. Así que se podría tomar en consideración lo siguiente:

  • direcciones MAC de los adaptadores de red (puede ser complicado si tienen una estación de acoplamiento o activar/desactivar su inalámbrico en un ordenador portátil)
  • CPUID componente
  • placa madre números de pieza (como los controladores IDE o SCSI)
  • número de serie de la unidad del sistema (NO ID de volumen que es fácil de cambiar)
  • etc.

Cuando se combinan en conjunto obtendrás una representación única de la máquina. El peligro, por supuesto, se produce cuando el usuario cambia algo en su máquina. ¿Pierden su licencia? ¿Tienen que contactarlo?

También tenga en cuenta que las clases WMI a menudo requieren derechos de administrador para leer el tipo de información que está buscando, lo que sería una verdadera molestia para los usuarios de Windows 7 de Vista &.

Hacer el bloqueo de hardware es muy difícil de hacer bien. Así que recomendaría 1. no hacerlo o 2. comprar una biblioteca comercial que ya lo haga.

+0

Usamos una combinación de CPUID y MAC Address para generar una identificación única, pero desafortunadamente más tarde descubrimos que hay tres computadoras en nuestra oficina que están generando la misma id :( –

+0

Si está usando CPUID y MAC Address que sería imposible Cada tarjeta de red recibe una identificación global única y dos tarjetas de red no informan la misma dirección. –

+1

ya, antes de ver el incidente sucediendo frente a mis propios ojos, también pensé que es imposible que suceda, pero realmente sucedió. –

6

ProcessorID o CPUID son para identificar el modelo y el conjunto de características del procesador (ARM, x86/x64).

El Pentium III admite un número de serie del procesador (PSN). In addition to only being supported on the Pentium III (and Transmeta's Efficeon and Crusoe processors), feature had to be enabled in BIOS and raised privacy concerns.

Así que no, ProcessorID no es exclusivo para todas las computadoras. Además, es muy probable que no sea único en todas las computadoras de su empresa (ya que muchas organizaciones compran varias computadoras del mismo modelo).

Cuestiones relacionadas