WIN32_Processor :: É ProcessorId exclusivo para todos os computadores

Eu quero usar algo único para um sistema de licenciamento. Eu decidi usar ProcessorID da class Win32_Processor Management.

Eu tentei em dois sistemas diferentes com o mesmo tipo de processador ..

Mostra-me o mesmo processorID para ambos os sistemas. Eu estou usando este 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; } 

Não, não pode ser garantido que será único, pois o processador pode nem mesmo suportar a instrução CPUID; nesse caso, a chamada não pode ser garantida para ser bem-sucedida.

Além disso, você está negligenciando que uma máquina pode ter vários processadores nela, portanto, obter o ID de um único processador não ajuda.


Como outros já indicaram, se você deseja obter um ID único para o sistema, sua melhor opção é criar um id que seja um amálgama de vários IDs de componentes no sistema.

Um hash (e não apenas qualquer, mas um que tem muito poucas colisões) de vários valores do hardware pode ser suficiente. Você provavelmente vai querer usar coisas que são bastante incorporadas no sistema, como o processador, informações da placa-mãe, mas não coisas facilmente desanexadas / alteradas, como unidades USB / hubs / etc.

A maioria dos sistemas de licenciamento depende de vários componentes de hardware para criar uma impressão digital. Nenhum componente único é usado como a única chave exclusiva. Então você pode levar em consideração o seguinte:

  • Endereços MAC de todos os adaptadores de rede (pode ficar complicado se eles têm uma estação de ancoragem ou ativar / desativar seu wireless em um laptop)
  • CPUID
  • Números de peça do componente da placa-mãe (como os controladores IDE ou SCSI)
  • Número de série da unidade do sistema (NÃO ID do volume, que é fácil de alterar)
  • etc.

Quando combinado como um todo, você terá uma representação única da máquina. O perigo, claro, vem quando o usuário muda alguma coisa em sua máquina. Eles perdem sua licença? Eles precisam entrar em contato com você?

Observe também que as classs WMI geralmente exigem direitos de administrador para ler o tipo de informação que você está procurando, o que seria um aborrecimento real para os usuários do Vista e do Windows 7.

Fazer o bloqueio de hardware é muito difícil de acertar. Então eu recomendo 1. não faça isso ou 2. compre uma biblioteca comercial que já faz isso.

O ProcessorID ou CPUID são para identificar o modelo e o conjunto de resources do processador ( ARM , x86 / x64 ).

O Pentium III suportava um número de série do processador (PSN). Além de ser suportado apenas no Pentium III (e processadores Efficeon e Crusoe da Transmeta) , o recurso tinha que ser ativado na BIOS e levantava preocupações com a privacidade .

Portanto, não, ProcessorID não é exclusivo para todos os computadores. Além disso, é muito provável que não seja exclusivo em todos os computadores da sua empresa (já que muitas organizações compram vários computadores do mesmo modelo).

Para a string exclusiva que você está procurando, usamos o endereço MAC. Se o usuário não tiver um endereço MAC , basta permitir várias instalações. Abrange a maioria dos casos, que é tudo o que queríamos realizar.