マシンの一意の ID の生成に関する質問が既に寄せられていることは知っていますが、私の質問は少し異なります。
ハードウェア情報を取得し、WMI を使用しない他の方法 (API 呼び出し?) があるかどうかを知りたいです。WMI はWin2000で導入されたため、Win98 では使用できないようです。Win98 でも実行しなければならないアプリケーションを持っています (それがひどいのはわかっていますが、何ができますか?) それでもハードウェア情報を取得できます。
マシンの一意の ID の生成に関する質問が既に寄せられていることは知っていますが、私の質問は少し異なります。
ハードウェア情報を取得し、WMI を使用しない他の方法 (API 呼び出し?) があるかどうかを知りたいです。WMI はWin2000で導入されたため、Win98 では使用できないようです。Win98 でも実行しなければならないアプリケーションを持っています (それがひどいのはわかっていますが、何ができますか?) それでもハードウェア情報を取得できます。
私はこれをライセンスプロジェクトのために数回行いました。ハードドライブのシリアル番号は次のように使用します。
private static extern long GetVolumeInformation(string PathName, StringBuilder VolumeNameBuffer, UInt32 VolumeNameSize, ref UInt32 VolumeSerialNumber, ref UInt32 MaximumComponentLength, ref UInt32 FileSystemFlags, StringBuilder FileSystemNameBuffer, UInt32 FileSystemNameSize);
VolumeSerialNumber
関数によって返されるを使用します。
また、Windows製品ID(にありますHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId
)の使用を検討したかもしれません。多くのWindowsXPユーザーがコピーを海賊版にし、同じプロダクトキーを共有していることに注意してください。
一意のキーを作成するために、さまざまなハードウェア情報を組み合わせることができます。
たとえば、CPU ID、MAC アドレスなどです。それらを取得し、結合し、暗号化すると、このマシンのハードウェア設定を一意に表現できます。
件名についてグーグルで検索してみてください:ハードウェア情報の読み取り方法。
私が見ることができるものから、CodeProject には非常に役立つ投稿があります: How To Get Hardware Information (CPU ID, MainBoard Info, Hard Disk Serial, System Information , ...)。
WinAPIのkernel32およびuser32ライブラリに目を通します。、、、、などEnumDisplayDevices
のあらゆる種類の機能があります。C#ラッパーコードが提供されるため、 PInvokeを使用してAPIを参照するのが好きですが、MSDNにはWindowsSDKにもすべて含まれています。GetLogicalDrives
GlobalMemoryStatus
GetVolumeInformation
ハードドライブのシリアルに関する@novatrustの答えは良いものですが、それ以上のものと組み合わせることができます。GetVolumeInformation
上記のpinvokeへのAPIリンクを提供しましたが、単純なGoogleでも機能するはずです。