Combine 3 byte buffers...

lidds

Well-known member
Joined
Oct 19, 2004
Messages
122
Programming Experience
Beginner
I was wondering if anyone could help me with combining 3 byte buffers. I am using a licening piece of software has supplied the below code example on there website, which is to create a unique machinecode. The problem is that the example shows how to use 2 computer parameter e.g. GetCPUId and GetMachineName() however I was to use GetCPUId(), GetMachineName() and GetMBSerial().

The problem is that I do not understand how to do this. I know this is probably simple, but I am still learning VB.Net.

Any help in showing what to modify would be really appreshiated.

VB.NET:
        ' Override to provide custom machine code 
        ' This example uses the CPU-ID as the machine code 
        Public Overrides Function GetLocalMachineCode() As Byte()
            Dim ret As Byte() = Nothing

            Try
                ret = CombineBuffersWithLength(GetCPUId(), GetMachineName())
            Catch ex As Exception
            End Try

            ' Fall back to base implementation if failed 
            If ret Is Nothing = True Or ret.Length = 2 Then
                ret = MyBase.GetLocalMachineCode()
            End If

            Return ret
        End Function

        ' Gets the CPU-ID of the local machine 
        Protected Shared Function GetCPUId() As Byte()
            Dim mgmt As ManagementClass = New ManagementClass("Win32_Processor")
            Dim objCol As ManagementObjectCollection = mgmt.GetInstances()
            Dim obj As ManagementObject

            For Each obj In objCol
                ' Only use CPU-ID from the first CPU 
                Dim cpuInfo As String = obj.Properties("ProcessorId").Value.ToString()
                If (cpuInfo Is Nothing = False And cpuInfo.Length > 0) Then
                    Dim ret As Byte() = Encoding.UTF8.GetBytes(cpuInfo)
                    Return ret
                End If
            Next

            Return New Byte(0) {}
        End Function

        Protected Shared Function GetMBSerial() As Byte()
            Try
                Dim mgmt As ManagementClass = New ManagementClass("Win32_BaseBoard")
                Dim objCol As ManagementObjectCollection = mgmt.GetInstances()
                Dim obj As ManagementObject

                For Each obj In objCol
                    ' Only use CPU-ID from the first CPU 
                    Dim mbserial As String = obj.Properties("SerialNumber").Value.ToString()
                    If (mbserial Is Nothing = False And mbserial.Length > 0) Then
                        Dim ret As Byte() = Encoding.UTF8.GetBytes(mbserial)
                        Return ret
                    End If
                Next
            Catch ex As Exception

            End Try
            Return New Byte(0) {}
        End Function

        Public Shared Function GetMachineName() As Byte()
            Dim computerName As String = Nothing

            computerName = MachineName.ToString
            If computerName <> "" Then
                Dim ret As Byte() = Encoding.UTF8.GetBytes(computerName)
                Return ret
            End If

            Return New Byte(0) {}
        End Function

        Public Shared Function GetUserName() As Byte()
            Dim userName As String = Nothing

            userName = UCase(Environment.UserName)
            If userName <> "" Then
                Dim ret As Byte() = Encoding.UTF8.GetBytes(userName)
                Return ret
            End If

            Return New Byte(0) {}
        End Function

        Shared Function CombineBuffersWithLength(ByVal buff1 As Byte(), ByVal buff2 As Byte()) As Byte()
            ' Returned format is: 
            ' buff1length-....buff1....-buff2length-...buff2.... 
            Dim ret As Byte() = New Byte(buff1.Length + buff2.Length + 2) {}
            ret(0) = CType(buff1.Length, Byte)
            buff1.CopyTo(ret, 1)
            ret(buff1.Length + 1) = CType(buff2.Length, Byte)
            buff2.CopyTo(ret, buff1.Length + 2)

            Return ret
        End Function

        Shared Function AreBuffersEqual(ByVal buff1 As Byte(), ByVal buff2 As Byte()) As Boolean
            Try
                If (buff1.Length <> buff2.Length) Then
                    Return False
                End If
                Dim i As Integer
                For i = 0 To buff1.Length - 1
                    If (buff1(i) <> buff2(i)) Then
                        Return False
                    End If
                Next i

                Return True
            Catch ex As Exception
            End Try

            Return False
        End Function

        ' Gets machine code components 
        Shared Function SplitBuffer(ByVal buff As Byte(), ByRef buff1 As Byte(), ByRef buff2 As Byte()) As Boolean
            buff1 = Nothing
            buff2 = Nothing

            Try
                Dim buff1Length As Byte = buff(0)
                buff1 = New Byte(buff1Length) {}
                Buffer.BlockCopy(buff, 1, buff1, 0, buff1Length)

                Dim buff2Length As Byte = buff(buff1Length + 1)
                buff2 = New Byte(buff2Length) {}
                Buffer.BlockCopy(buff, buff1Length + 2, buff2, 0, buff2Length)

                Return True
            Catch
                buff1 = Nothing
                buff2 = Nothing
            End Try
            Return False
        End Function
 
Think about it. You can add two numbers, right? So, how do you add three numbers? You add two of them and then add the result to the third, right? This is the same. If you have three buffers then you simply combine the first two into one and then combine that with the third.
 
Back
Top