API in C # per catturare ID CPU e unità / volume seriale
Domanda
Sono consapevole di poter acquisire l'identificatore della CPU e il numero seriale del volume per un'unità fisica eseguendo una query su WMI, ma WMI di solito impiega molto tempo. Quali altre opzioni più veloci sono disponibili per recuperare queste informazioni? Esistono API Win32 che lo farebbero?
Modifica: Consentimi di chiarire. Per identificatore della CPU, mi riferisco allo stesso valore che si ottiene interrogando le seguenti proprietà dell'istanza WMI:
- Win32_Processor :: ProcessorId
- Win32_LogicalDisk :: VolumeSerialNumber
Soluzione
Tieni presente che l'ID della CPU non è sempre disponibile.
A proposito, cosa stai cercando di realizzare? Se desideri generare una chiave univoca per un'istanza di computer, controlla Generazione di Chiave unica (dito Stampa) per un computer a fini di licenza pubblicato da Sowkot Osman presso Codeproject; può darti alcuni suggerimenti (leggi anche i commenti).
Altri suggerimenti
Puoi interrogare il registro di Windows per le informazioni sull'unità, ma non sei sicuro della CPU. Sembra che la tua domanda sia indirizzata in questo SO q / a (dimostra una serie di metodi per ottenere queste informazioni, ma per velocità, forse ottenerle dal registro è la soluzione migliore):
WMI in realtà prende buona parte dei suoi dati dal registro. Il sistema memorizza molte informazioni sul sistema ed è ovviamente molto rapido rispondere.
Se stai cercando di bloccare la scheda madre, la CPU e / o l'HDD per motivi di licenza, controlla i seguenti valori:
HKLM \ HARDWARE \ DESCRIPTION \ System \ BIOS \ BaseBoardManufacturer
HKLM \ HARDWARE \ DESCRIPTION \ System \ BIOS \ BaseBoardProduct
HKLM \ HARDWARE \ DESCRIPTION \ System \ CentralProcessor \ 0 \ Identifier
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
(può essere specifico per schede con RAID in uso)
Se si desidera ottenere il disco seriale senza WMI, inviare una chiamata DeviceIoControl al dispositivo di azionamento fisico. Codice di esempio in VB.NET: http://www.dreamincode.net/code/snippet429.htm
Per CPUID, prova questo: http: // devpinoy .org / blogs / cvega / archive / 2006/04/07 / 2658.aspx
Per il numero di serie del volume, provare questo: http://www.eggheadcafe.com/articles /20021019.asp
Google è tuo amico ;-)
Mi piace GetSystemInfo ma non è così copre le unità fisiche ..