2009-05-16 10 views
3

Je sais qu'un question a déjà été interrogé sur la génération d'un identifiant unique pour une machine mais ma question est légèrement différente.Comment obtenir une signature de machine unique sans WMI?

Je veux savoir s'il existe d'autres méthodes (appels API?) Pour obtenir des informations sur le matériel et ne pas utiliser WMI. Je comprends de MSDN que WMI est introduit dans Win2000 donc il ne semble pas être disponible dans Win98. J'ai une application qui doit fonctionner même sur Win98 (je sais que ça craint mais que pouvez-vous faire?) Et toujours obtenir des informations sur le matériel.

+1

Dans quelle langue aimeriez-vous votre exemple? –

+0

Je cherche des appels d'API appropriés qui peuvent me donner cette information. Échantillon dans n'importe quelle langue (C#, C++, C, Pascal) fera l'affaire. – Hemant

Répondre

3

Je l'ai fait plusieurs fois pour les projets de licence. Pour l'utilisation du numéro de série du disque dur:

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

Utilisez le VolumeSerialNumber qui est renvoyée par la fonction.

En outre, vous avez peut-être pensé à utiliser l'ID de produit Windows (situé au HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId). Attention, un grand nombre d'utilisateurs de Windows XP ont des copies piratées et partagent les mêmes clés de produit.

+1

MSDN en ligne vous dira que GetVolumeInformation est uniquement disponible à partir de Windows 2000, mais ce n'est pas vrai. Les versions récentes du contenu de la bibliothèque MSDN aiment à nier l'existence de Windows 9x, mais si vous regardez dans une ancienne version de la bibliothèque MSDN (j'ai regardé dans celui fourni avec Visual Studio 2005) cela montre que GetVolumeInformation * est * disponible dans Windows 98. – RichieHindle

2

Vous pouvez combiner différentes informations matérielles afin de créer une clé unique. Par exemple, ID CPU, adresse MAC, etc. Vous les récupérez, les combinez, les chiffrez et vous avez une représentation unique de la configuration matérielle de cette machine.

Essayez de googler sur le sujet: comment lire les informations matérielles. D'après ce que je peux voir il y a une publication très utile dans CodeProject: How To Get Hardware Information (CPU ID, MainBoard Info, Hard Disk Serial, System Information , ...).

+1

C'est exactement la question! * COMMENT * obtenir cette information? – Hemant

+0

l'exemple fait référence à .NET 2.0, ce qui est OK pour votre exigence Win98 – Konstantinos

1

Parcourez la bibliothèque kernel32 et user32 de WinAPI. Il a toutes sortes de goodies comme EnumDisplayDevices, GetLogicalDrives, GlobalMemoryStatus, GetVolumeInformation, etc, etc. J'aime utiliser PInvoke pour parcourir l'API car il me donne le code de l'encapsuleur C# - mais MSDN aura tout aussi bien dans le SDK Windows.

@ réponse de novatrust concernant la série du disque dur est un bon - mais il peut être combiné avec. J'ai fourni le lien API GetVolumeInformation ci-dessus, mais un simple Google devrait fonctionner aussi bien.

Questions connexes