Windows SDK には、 computerhardwareidsという名前の CLI ツールがあります。
このツールは、特定のケースに適切な HardwareId を選択するために、さまざまな GUID を返します。
これは、私の PC でこのツールを返す出力です。
Using the BIOS to gather information
Computer Information
--------------------
BIOS Vendor: American Megatrends Inc.
BIOS Version string: 1201
System BIOS Major Release: 4
System BIOS Minor Release: 6
System Manufacturer: To be filled by O.E.M.
System Family: To be filled by O.E.M.
System ProductName: To be filled by O.E.M.
SKU Number: SKU
Enclosure Type: 03 "Desktop"
Hardware IDs
------------
{a8670b03-1d98-5e95-ad4e-c64211eac9df} <- Manufacturer + Family + ProductName + SKUNumber + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release
{01c6b2a2-a2b2-58e4-906d-4677639f1a42} <- Manufacturer + Family + ProductName + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release
{dc5af3fe-c2de-539d-aafd-5061a1634723} <- Manufacturer + ProductName + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release
{d78b474d-dee0-5412-bc9d-e9f7d7783df2} <- Manufacturer + Family + ProductName + SKUNumber
{7ccbb6f1-9641-5f84-b00d-51ff218a4066} <- Manufacturer + Family + ProductName
{5a127cba-be28-5d3b-84f0-0e450d266d97} <- Manufacturer + SKUNumber
{6525c6e5-28e9-5f9c-abe4-20fd82504002} <- Manufacturer + ProductName
{6525c6e5-28e9-5f9c-abe4-20fd82504002} <- Manufacturer + Family
{482f3f58-6045-593a-9be4-611717ce4770} <- Manufacturer + Enclosure Type
{11b4a036-3b64-5421-a372-22c07df10a4d} <- Manufacturer
そのMicrosoftツールの機能を模倣し、まったく同じHardwareIds(まったく同じ)を返す汎用使用関数を開発したいと思います。
MSDN で情報を見つけました。すべての出力は非常に文書化されているようで、このツールを返す値に関する情報が含まれていますが、WMI クラスのプロパティを正確に指定していません。「Bios」と「System」とだけ表示されています。 :
「ファミリ」、「BIOS ベンダー」、「BIOS メジャー リリース」、「BIOS マイナー リリース」などの値が見つからず、「SKU 番号」がどこを指しているのかわかりません。
これらは、ツールがすべてのデータの一部を取得して GUID を作成する WMI クラスだと思います。
· Win32_ComputerSystemProduct クラス
ドキュメントにも次のように記載されていることに注意してください。
各文字列は、SHA-1 ハッシュ アルゴリズムを使用して GUID に変換されます。
これは私がやろうとしたことですが、いくつかの概念やいくつかの値が間違っているかどうかはわかりません.不完全であり、Guisにも問題があります(コメントラインで説明されています):
Private Function GetHardwareId() As Guid
Dim HardwareId As String = String.Empty
Dim BIOSVersion, BIOSVendor, BIOSMajorRelease, BIOSMinorRelease,
SystemManufacturer, SystemFamily, SystemProductName, SKUNumber As String
' Get System Info.
Using wmi As New Management.ManagementObjectSearcher("select * from Win32_ComputerSystem")
Using SystemInfo As Management.ManagementObject = wmi.Get(0)
SystemManufacturer = Convert.ToString(SystemInfo.Properties("Manufacturer").Value)
SystemProductName = Convert.ToString(SystemInfo.Properties("Model").Value)
SystemFamily = I don't know how to get it.
SKUNumber = I don't know how to get it.
End Using
End Using
' Get BIOS Info.
Using wmi As New Management.ManagementObjectSearcher("select * from Win32_BIOS")
Using BIOSInfo As Management.ManagementObject = wmi.Get(0)
BIOSVersion = Convert.ToString(BIOSInfo.Properties("SMBIOSBIOSVersion").Value)
BIOSVendor = I don't know how to get it.
BIOSMajorRelease = I don't know how to get it.
BIOSMinorRelease = I don't know how to get it.
End Using
End Using ' wmi
HardwareId = BIOSVersion & BIOSVendor & BIOSMajorRelease & BIOSMinorRelease &
SystemManufacturer & SystemFamily & SystemProductName & SKUNumber
' Here I call other method to encode the resulting string to SHA1 Hash
HardwareId = ConvertToSHA1(HardwareId)
' and then continue below...
' But this will not work,
' it throws an exception about missing "-" chars in the SHA1 string.
' So Microsoft formats "manualy" the SHA1 string to add some "-"?
Return Guid.Parse(HardwareId)
End Function