I just would like to share the full solution I did time ago, under VB.NET.
This code replicates all the exact same fourteen HWIDs as the computerhardwareids program. See the code example in the XML documentation block to get a identical output.
Two things to consider: I didn't tested this code outside of my computer, so I can't say if it will still generate the same HWIDs as the computerhardwareids program under unexpected circumstances.
And the part where I build the enclosureType
string it is totally theoretical in the meaning that I'm not sure if the HardwareId-12
it will work as expected when the chassisTypes
array has various values, since I didn't tested it outside of my computer as I said.
ComputerHardwareIdMicrosoftType.vb
''' <summary>
''' Specifies a Computer Hardware Id (CHID) for <see cref="UtilDevices.ComputerHardwareIdFromMicrosoftHwIdType"/> property.
''' </summary>
'''
''' <remarks>
''' <see href="https://docs.microsoft.com/en-us/windows-hardware/drivers/install/specifying-hardware-ids-for-a-computer"/>
''' <para></para>
''' Use <see cref="HardwareID_3"/> or <see cref="HardwareID_4"/> as the first choice
''' if the software matches a computer that has a specific make, family, and model.
''' This allows a software to match the specified computer, which provides the most precise metadata for the computer.
''' <para></para>
''' Use <see cref="HardwareID_5"/> as the second choice if the software covers the entire family of computers.
''' In this case, the computer family is unique and is not branded with more than one product line.
''' <para></para>
''' Use <see cref="HardwareID_6"/> or <see cref="HardwareID_7"/> as the third choice
''' if the software covers all of your computers or those computers with a specific enclosure type.
''' </remarks>
Public Enum ComputerHardwareIdMicrosoftType
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{035a20a6-fccf-5040-bc3e-b8b794c57f52} <- Manufacturer</item>
''' </list>
''' </summary>
HardwareID_14 = 14
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Baseboard Manufacturer</item>
''' <item>Baseboard Product</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{53b44fbf-2036-56ac-bc21-722e871e765a} <- Manufacturer + Baseboard Manufacturer + Baseboard Product</item>
''' </list>
''' </summary>
HardwareID_13 = 13
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Enclosure Type</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{a7aaa273-f280-513a-b907-919359a44175} <- Manufacturer + Enclosure Type</item>
''' </list>
''' </summary>
HardwareID_12 = 12
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Family</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{7315e85a-f6ec-5bf0-b11d-411fb886c323} <- Manufacturer + Family</item>
''' </list>
''' </summary>
HardwareID_11 = 11
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Family</item>
''' <item>Baseboard Manufacturer</item>
''' <item>Baseboard Product</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{a92d6619-1da8-577e-97af-b17ddbd71f75} <- Manufacturer + Family + Baseboard Manufacturer + Baseboard Product</item>
''' </list>
''' </summary>
HardwareID_10 = 10
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Product Name</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{0dcce594-e561-59aa-9e30-21077acb429c} <- Manufacturer + ProductName</item>
''' </list>
''' </summary>
HardwareID_9 = 9
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Product Name</item>
''' <item>Baseboard Manufacturer</item>
''' <item>Baseboard Product</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{8de62569-29ce-5767-84de-655c56d8ab67} <- Manufacturer + ProductName + Baseboard Manufacturer + Baseboard Product</item>
''' </list>
''' </summary>
HardwareID_8 = 8
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>SKU Number</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{d2957e9e-702e-591d-a829-36238d29d986} <- Manufacturer + SKUNumber</item>
''' </list>
''' </summary>
HardwareID_7 = 7
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>SKU Number</item>
''' <item>Baseboard Manufacturer</item>
''' <item>Baseboard Product</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{3b4375dd-3630-5839-9362-85b2bdb9defb} <- Manufacturer + SKUNumber + Baseboard Manufacturer + Baseboard Product</item>
''' </list>
''' </summary>
HardwareID_6 = 6
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Family</item>
''' <item>Product Name</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{ceb119e2-5411-5694-a8f1-57a5767fe85d} <- Manufacturer + Family + ProductName</item>
''' </list>
''' </summary>
HardwareID_5 = 5
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Family</item>
''' <item>Product Name</item>
''' <item>SKU Number</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{9b3edbb4-9a86-5379-ad5e-4c6df298d9f8} <- Manufacturer + Family + ProductName + SKUNumber</item>
''' </list>
''' </summary>
HardwareID_4 = 4
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Family</item>
''' <item>Product Name</item>
''' <item>SKU Number</item>
''' <item>Baseboard Manufacturer</item>
''' <item>Baseboard Product</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{618e64e8-ca25-5b1a-b1ee-b66a7385f1ed} <- Manufacturer + Family + ProductName + SKUNumber + Baseboard Manufacturer + Baseboard Product</item>
''' </list>
''' </summary>
HardwareID_3 = 3
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Product Name</item>
''' <item>BIOS Vendor</item>
''' <item>BIOS Version</item>
''' <item>BIOS Major Release</item>
''' <item>BIOS Minor Release</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{dfed620c-3091-5ce9-bf23-2d47ba155d65} <- Manufacturer + ProductName + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release</item>
''' </list>
''' </summary>
HardwareID_2 = 2
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Family</item>
''' <item>Product Name</item>
''' <item>BIOS Vendor</item>
''' <item>BIOS Version</item>
''' <item>BIOS Major Release</item>
''' <item>BIOS Minor Release</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{9b8fcb39-4611-5c0c-a947-4c269fb3b9e9} <- Manufacturer + Family + ProductName + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release</item>
''' </list>
''' </summary>
HardwareID_1 = 1
''' <summary>
''' A hardwae Id. based on the following components:
''' <list type="bullet">
''' <item>Manufacturer</item>
''' <item>Family</item>
''' <item>Product Name</item>
''' <item>SKU Number</item>
''' <item>BIOS Vendor</item>
''' <item>BIOS Version</item>
''' <item>BIOS Major Release</item>
''' <item>BIOS Minor Release</item>
''' </list>
'''
''' <para></para>
''' Example output from <c>computerhardwareids</c> program:
''' <list type="bullet">
''' <item>{d669d1f2-9fcc-580d-bee1-a7ec7078d827} <- Manufacturer + Family + ProductName + SKUNumber + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release</item>
''' </list>
''' </summary>
HardwareID_0 = 0
End Enum
GetComputerHardwareIdFromMicrosoftHwIdType method
''' <summary>
''' Gets a unique computer hardware identifier (CHID) that matches the current computer.
''' <para></para>
''' This identifier is generated following Microsoft's PC Device Metadata packages schemas:
''' <para></para>
''' https://docs.microsoft.com/en-us/windows-hardware/drivers/install/specifying-hardware-ids-for-a-computer
''' <para></para>
''' In fact, this function generates the exact same identifiers as the
''' 'computerhardwareids.exe' program included in the Windows SDK:
''' https://docs.microsoft.com/es-es/windows-hardware/drivers/devtest/computerhardwareids
''' <para></para>
''' https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/
''' <para></para>
''' <para></para>
''' Use HardwareID-3 or HardwareID-4 as the first choice if the software matches a computer
''' that has a specific make, family, and model. This allows a software to match the specified computer,
''' which provides the most precise metadata for the computer.
''' <para></para>
''' Use HardwareID-5, as the second choice if the software covers the entire family of computers.
''' In this case, the computer family is unique and is not branded with more than one product line.
''' <para></para>
''' Use HardwareID-6 or HardwareID-7 as the third choice if the software covers all of your computers
''' or those computers with a specific enclosure type.
''' </summary>
'''
''' <example> This is a code example.
''' <code language="VB.NET">
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_0)}}} <- Manufacturer + Family + ProductName + SKUNumber + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_1)}}} <- Manufacturer + Family + ProductName + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_2)}}} <- Manufacturer + ProductName + BIOS Vendor + BIOS Version + BIOS Major Release + BIOS Minor Release")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_3)}}} <- Manufacturer + Family + ProductName + SKUNumber + Baseboard Manufacturer + Baseboard Product")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_4)}}} <- Manufacturer + Family + ProductName + SKUNumber")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_5)}}} <- Manufacturer + Family + ProductName")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_6)}}} <- Manufacturer + SKUNumber + Baseboard Manufacturer + Baseboard Product")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_7)}}} <- Manufacturer + SKUNumber")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_8)}}} <- Manufacturer + ProductName + Baseboard Manufacturer + Baseboard Product")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_9)}}} <- Manufacturer + ProductName")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_10)}}} <- Manufacturer + Family + Baseboard Manufacturer + Baseboard Product")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_11)}}} <- Manufacturer + Family")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_12)}}} <- Manufacturer + Enclosure Type")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_13)}}} <- Manufacturer + Baseboard Manufacturer + Baseboard Product")
''' Console.WriteLine($"{{{GetComputerHardwareIdFromMicrosoftHwIdType(ComputerHardwareIdMicrosoftType.HardwareID_14)}}} <- Manufacturer")
''' </code>
''' </example>
'''
''' <returns>
''' The resulting unique computer hardware identifier (CHID) that matches the current computer.
''' </returns>
<DebuggerStepThrough>
Private Shared Function GetComputerHardwareIdFromMicrosoftHwIdType(hwidType As ComputerHardwareIdMicrosoftType) As Guid
Select Case CInt(hwidType)
Case Is < ComputerHardwareIdMicrosoftType.HardwareID_0, Is > ComputerHardwareIdMicrosoftType.HardwareID_14
Throw New InvalidEnumArgumentException(argumentName:=NameOf(hwidType), invalidValue:=hwidType, enumClass:=GetType(ComputerHardwareIdMicrosoftType))
End Select
' Namespace used by 'computerhardwareids.exe' program included in the Windows SDK.
' https://mcmap.net/q/1919229/-get-hardware-ids-like-microsoft-does/43619888#43619888
' https://blogs.gnome.org/hughsie/2017/04/25/reverse-engineering-computerhardwareids-exe-with-winedbg/
Dim namespaceUUID As Guid = Guid.Parse("70ffd812-4c7f-4c7d-0000-000000000000")
' Win32_ComputerSystem fields
Dim manufacturer, family, productName, skuNumber As String
' Win32_BaseBoard fields
Dim baseBoardManufacturer, baseBoardProduct As String
' Win32_BIOS fields
Dim biosVendor, biosVersion, biosMajorRelease, biosMinorRelease As String
' Win32_SystemEnclosure fields
Dim enclosureType As String = Nothing
' Retrieve computer info.
Using mos As New ManagementObjectSearcher()
' Win32_ComputerSystem
mos.Query.QueryString = "SELECT Manufacturer,Model,SystemFamily,SystemSKUNumber FROM Win32_ComputerSystem"
Using systemInfo As ManagementObject = DirectCast(mos.Get(0), ManagementObject)
manufacturer = CStr(systemInfo.Properties("Manufacturer")?.Value)?.Trim()
productName = CStr(systemInfo.Properties("Model")?.Value)?.Trim()
family = CStr(systemInfo.Properties("SystemFamily")?.Value)?.Trim()
skuNumber = CStr(systemInfo.Properties("SystemSKUNumber")?.Value)?.Trim()
End Using
' Win32_BaseBoard
mos.Query.QueryString = "SELECT Manufacturer,Product FROM Win32_BaseBoard"
Using baseBoardInfo As ManagementObject = DirectCast(mos.Get(0), ManagementObject)
baseBoardManufacturer = CStr(baseBoardInfo.Properties("Manufacturer")?.Value)?.Trim()
baseBoardProduct = CStr(baseBoardInfo.Properties("Product")?.Value)?.Trim()
End Using
' Win32_BIOS
mos.Query.QueryString = "SELECT Manufacturer,SMBIOSBIOSVersion,SystemBiosMajorVersion,SystemBiosMinorVersion FROM Win32_BIOS"
Using biosInfo As ManagementObject = DirectCast(mos.Get(0), ManagementObject)
biosVendor = CStr(biosInfo.Properties("Manufacturer")?.Value)?.Trim()
biosVersion = CStr(biosInfo.Properties("SMBIOSBIOSVersion")?.Value)?.Trim()
biosMajorRelease = CByte(biosInfo.Properties("SystemBiosMajorVersion")?.Value).ToString("X2").ToLower()
biosMinorRelease = CByte(biosInfo.Properties("SystemBiosMinorVersion")?.Value).ToString("X2").ToLower()
End Using
' Win32_SystemEnclosure
mos.Query.QueryString = "SELECT ChassisTypes FROM Win32_SystemEnclosure"
Using enclosureInfo As ManagementObject = DirectCast(mos.Get(0), ManagementObject)
Dim chassisTypes As UShort() = DirectCast(enclosureInfo.Properties("ChassisTypes").Value, UShort())
For Each chassisType As UShort In chassisTypes
enclosureType &= CStr(chassisType)
Next chassisType
If String.IsNullOrEmpty(enclosureType) Then
enclosureType = "2" ' Unknown (2)
End If
End Using
End Using
#If DEBUG Then
' Console.WriteLine($"{NameOf(manufacturer)} = {manufacturer}")
' Console.WriteLine($"{NameOf(enclosureType)} = {enclosureType}")
' Console.WriteLine($"{NameOf(productName)} = {productName}")
' Console.WriteLine($"{NameOf(family)} = {family}")
' Console.WriteLine($"{NameOf(skuNumber)} = {skuNumber}")
' Console.WriteLine($"{NameOf(baseBoardManufacturer)} = {baseBoardManufacturer}")
' Console.WriteLine($"{NameOf(baseBoardProduct)} = {baseBoardProduct}")
' Console.WriteLine($"{NameOf(biosVendor)} = {biosVendor}")
' Console.WriteLine($"{NameOf(biosVersion)} = {biosVersion}")
' Console.WriteLine($"{NameOf(biosMajorRelease)} = {biosMajorRelease}")
' Console.WriteLine($"{NameOf(biosMinorRelease)} = {biosMinorRelease}")
#End If
Dim stringToHash As String = String.Empty
Select Case hwidType
Case ComputerHardwareIdMicrosoftType.HardwareID_0
stringToHash = $"{manufacturer}&{family}&{productName}&{skuNumber}&{biosVendor}&{biosVersion}&{biosMajorRelease}&{biosMinorRelease}"
Case ComputerHardwareIdMicrosoftType.HardwareID_1
stringToHash = $"{manufacturer}&{family}&{productName}&{biosVendor}&{biosVersion}&{biosMajorRelease}&{biosMinorRelease}"
Case ComputerHardwareIdMicrosoftType.HardwareID_2
stringToHash = $"{manufacturer}&{productName}&{biosVendor}&{biosVersion}&{biosMajorRelease}&{biosMinorRelease}"
Case ComputerHardwareIdMicrosoftType.HardwareID_3
stringToHash = $"{manufacturer}&{family}&{productName}&{skuNumber}&{baseBoardManufacturer}&{baseBoardProduct}"
Case ComputerHardwareIdMicrosoftType.HardwareID_4
stringToHash = $"{manufacturer}&{family}&{productName}&{skuNumber}"
Case ComputerHardwareIdMicrosoftType.HardwareID_5
stringToHash = $"{manufacturer}&{family}&{productName}"
Case ComputerHardwareIdMicrosoftType.HardwareID_6
stringToHash = $"{manufacturer}&{skuNumber}&{baseBoardManufacturer}&{baseBoardProduct}"
Case ComputerHardwareIdMicrosoftType.HardwareID_7
stringToHash = $"{manufacturer}&{skuNumber}"
Case ComputerHardwareIdMicrosoftType.HardwareID_8
stringToHash = $"{manufacturer}&{productName}&{baseBoardManufacturer}&{baseBoardProduct}"
Case ComputerHardwareIdMicrosoftType.HardwareID_9
stringToHash = $"{manufacturer}&{productName}"
Case ComputerHardwareIdMicrosoftType.HardwareID_10
stringToHash = $"{manufacturer}&{family}&{baseBoardManufacturer}&{baseBoardProduct}"
Case ComputerHardwareIdMicrosoftType.HardwareID_11
stringToHash = $"{manufacturer}&{family}"
Case ComputerHardwareIdMicrosoftType.HardwareID_12
stringToHash = $"{manufacturer}&{enclosureType}"
Case ComputerHardwareIdMicrosoftType.HardwareID_13
stringToHash = $"{manufacturer}&{baseBoardManufacturer}&{baseBoardProduct}"
Case ComputerHardwareIdMicrosoftType.HardwareID_14
stringToHash = manufacturer
End Select
' Creates a name-based UUID using the algorithm from RFC 4122 §4.3.
' https://mcmap.net/q/1839771/-generating-uuid-based-on-strings
Dim generateGuidDelegate As Func(Of Guid, String, Guid) =
Function(namespaceId As Guid, name As String) As Guid
' Converts a GUID (expressed as a byte array) to/from network order (MSB-first).
Dim swapByteOrderDelegate As New Action(Of Byte())(
Sub(guid() As Byte)
Dim temp As Byte = guid(0)
guid(0) = guid(3)
guid(3) = temp
temp = guid(1)
guid(1) = guid(2)
guid(2) = temp
temp = guid(4)
guid(4) = guid(5)
guid(5) = temp
temp = guid(6)
guid(6) = guid(7)
guid(7) = temp
End Sub)
' Convert the name to a sequence of octets (as defined by the standard or conventions of its namespace) (step 3).
Dim nameBytes() As Byte = Encoding.Unicode.GetBytes(name)
' Convert the namespace UUID to network order (step 3).
Dim namespaceBytes() As Byte = namespaceId.ToByteArray()
swapByteOrderDelegate.Invoke(namespaceBytes)
' Compute the hash of the name space ID concatenated with the name (step 4).
Dim hash As Byte()
Using algorithm As HashAlgorithm = SHA1.Create()
algorithm.TransformBlock(namespaceBytes, 0, namespaceBytes.Length, Nothing, 0)
algorithm.TransformFinalBlock(nameBytes, 0, nameBytes.Length)
hash = algorithm.Hash
End Using
' Most bytes from the hash are copied straight to the bytes of the new GUID (steps 5-7, 9, 11-12).
Dim newGuid(15) As Byte
Array.Copy(hash, 0, newGuid, 0, 16)
' Set the four most significant bits (bits 12 through 15) of the time_hi_and_version field
' to the appropriate 4-bit version number from Section 4.1.3 (step 8).
newGuid(6) = CByte((newGuid(6) And &HF) Or (5 << 4))
' Set the two most significant bits (bits 6 and 7) of the clock_seq_hi_and_reserved
' to zero and one, respectively (step 10).
newGuid(8) = CByte((newGuid(8) And &H3F) Or &H80)
' Convert the resulting UUID to local byte order (step 13).
swapByteOrderDelegate.Invoke(newGuid)
Return New Guid(newGuid)
End Function
Return generateGuidDelegate.Invoke(namespaceUUID, stringToHash)
End Function