APIs em C # para pegar IDs de CPU e unidade / série do volume
Pergunta
Estou ciente de que posso agarrar o identificador de CPU eo número de série do volume para uma unidade física por meio de consulta WMI, mas WMI geralmente leva o seu tempo doce. Que outras opções mais rápidas, se houver, estão disponíveis para recuperar essas informações? Existem APIs Win32 que iria fazer isso?
Editar: Permita-me esclarecer. Ao identificador de CPU, estou me referindo ao mesmo valor que se obtém por meio de consulta as seguintes propriedades de instância WMI:
- Win32_Processor :: ProcessorId
- Win32_LogicalDisk :: VolumeSerialNumber
Solução
Basta ter em mente que ID da CPU não está sempre disponível.
A propósito, o que você está tentando realizar? Se você deseja gerar uma chave única para uma instância de computador, verifique o Gerando chave exclusiva (Dedo Imprimir) para um computador e Licenciamento de Fins mensagem por Sowkot Osman em codeproject; ele pode dar-lhe algumas sugestões (comentários também ler).
Outras dicas
Você pode consultar o registro do Windows para as informações da unidade, não tenho certeza sobre a CPU embora. Parece que a sua pergunta é abordado neste SO q / a (demonstra uma série de métodos para obter esta informação, mas para a velocidade, talvez recebendo a partir do registro é a sua melhor aposta):
WMI realmente leva uma parcela boa de seus dados a partir do registro. O sistema armazena muita informação lá sobre o sistema, e é obviamente muito rápido para responder.
Se você estiver olhando para bloqueio à placa-mãe, CPU e / ou HDD para o licenciamento razões, confira os seguintes valores:
HKLM \ HARDWARE \ DESCRIPTION \ System \ BIOS \ BaseBoardManufacturer
HKLM \ HARDWARE \ DESCRIPTION \ System \ BIOS \ BaseBoardProduct
HKLM \ HARDWARE \ DESCRIPTION \ System \ CentralProcessor \ 0 \ Identificador
HKLM \ HARDWARE \ DESCRIPTION \ System \ CentralProcessor \ 0 \ ProcessorNameString
HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ DigitalProductId
HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProductId
HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ BuildLabEx
HKLM \ HARDWARE \ DESCRIPTION \ System \ MultifunctionAdapter \ 0 \ DiskController \ 0 \ DiskPeripheral \ 0
(pode ser específica para placas com RAID em uso)
Se você deseja obter o número de série do disco sem WMI, emitir uma chamada DeviceIoControl para o dispositivo de unidade física. código de amostra em VB.NET: http://www.dreamincode.net/code/snippet429.htm
Para CPUID, tente o seguinte: http: // devpinoy .org / blogs / cvega / Arquivo / 2006/04/07 / 2658.aspx
Para Volume Serial Number, tente o seguinte: http://www.eggheadcafe.com/articles /20021019.asp
O Google é seu amigo; -)
Eu gosto GetSystemInfo mas que doesn 't cobrir unidades físicas ..