2009-05-16 9 views
3

Ich weiß, dass eine question wurde schon gefragt, über die Generierung einer eindeutigen ID für eine Maschine, aber meine Frage ist etwas anders.Wie erhält man eine einzigartige Maschinensignatur ohne WMI?

Ich möchte wissen, ob es andere Methoden (API-Aufrufe?) Gibt, um Hardwareinformationen zu erhalten und WMI NICHT zu verwenden. Ich verstehe von MSDN, dass WMI in Win2000 eingeführt wird, so scheint es nicht in Win98 verfügbar sein. Ich habe eine Anwendung, die sogar auf Win98 laufen muss (ich weiß, es ist scheiße, aber was kannst du tun?) Und immer noch Hardware-Informationen zu bekommen.

+1

In welcher Sprache möchten Sie Ihr Beispiel haben? –

+0

Ich suche nach geeigneten API-Anrufen, die mir diese Informationen geben können. Sample in jeder Sprache (C#, C++, C, Pascal) reicht aus. – Hemant

Antwort

3

Ich habe das schon mehrmals für Lizenzprojekte gemacht. Für die Festplatte Seriennummer Verwendung:

private static extern long GetVolumeInformation(string PathName, StringBuilder VolumeNameBuffer, UInt32 VolumeNameSize, ref UInt32 VolumeSerialNumber, ref UInt32 MaximumComponentLength, ref UInt32 FileSystemFlags, StringBuilder FileSystemNameBuffer, UInt32 FileSystemNameSize); 

die VolumeSerialNumber verwenden, die von der Funktion zurückgegeben wird.

Möglicherweise haben Sie auch daran gedacht, die Windows-Produkt-ID (unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId) zu verwenden. Seien Sie vorsichtig, viele Windows XP-Benutzer haben Raubkopien und teilen sich die gleichen Produktschlüssel.

+1

MSDN Online wird Ihnen mitteilen, dass GetVolumeInformation nur von Windows 2000 verfügbar ist, aber das stimmt nicht. Neuere Versionen des MSDN-Bibliotheksinhalts verweigern die Existenz von Windows 9x. Wenn Sie jedoch in einer alten Version der MSDN-Bibliothek suchen (ich habe in der Version von Visual Studio 2005 nachgesehen), wird angezeigt, dass GetVolumeInformation * in * verfügbar ist Windows 98. – RichieHindle

2

Sie können verschiedene Hardwareinformationen kombinieren, um einen eindeutigen Schlüssel zu erstellen.

Zum Beispiel, CPU-ID, MAC-Adresse usw. Sie holen sie, kombinieren sie, verschlüsseln sie und Sie haben eine einzigartige Darstellung der Hardware-Setup dieser Maschine.

Versuchen Sie, über das Thema zu googeln: wie Hardware-Informationen zu lesen.

Von was ich sehen kann, gibt es einen sehr nützlichen Beitrag in CodeProject: How To Get Hardware Information (CPU ID, MainBoard Info, Hard Disk Serial, System Information , ...).

+1

Das ist genau die Frage! * WIE * um diese Information zu bekommen? – Hemant

+0

Das Beispiel verweist auf .NET 2.0, das für Ihre Win98-Anforderung in Ordnung ist – Konstantinos

1

Sehen Sie sich die WinAPI-Bibliotheken kernel32 und user32 an. Es hat alle Arten von Leckereien wie EnumDisplayDevices, GetLogicalDrives, GlobalMemoryStatus, GetVolumeInformation, etc., etc. Ich mag PInvoke verwenden, um die API zu durchsuchen, da es mir den C# -Wrapper-Code gibt - aber MSDN wird alles auch im Windows SDK haben.

@ Die Antwort von novatrust bezüglich der Festplattenserie ist eine gute - kann aber mit mehr kombiniert werden. Ich habe den GetVolumeInformation API-Link zur Verfügung gestellt, um oben pinvoke, aber ein einfaches Google sollte auch funktionieren.