Buenos dias.


El codigo para la busqueda de todos los archivos ubicados en el disco duro o en alguna ubicación consta de 2 partes.

En el procedimiento scanSubfolders le indico la ubicación. Este llama a la función getFilesRecursive para obtener la lista de todos los archivos que se encuentran en la ubicación indicada.

Código:
Dim list As List(Of String)

Sub scanSubfolders(ByVal FolderLocation As String)
        list = GetFilesRecursive(FolderLocation)
        ProgressBar1.Maximum = list.Count
        total.Text = list.Count
        maximo = list.Count - 1
End Sub

Public Shared Function GetFilesRecursive(ByVal initial As String) As List(Of String)
        ' This list stores the results.
        Dim result As New List(Of String)

        ' This stack stores the directories to process.
        Dim stack As New Stack(Of String)

        ' Add the initial directory
        stack.Push(initial)

        ' Continue processing for each stacked directory
        Do While (stack.Count > 0)
            ' Get top directory string
            Dim dir As String = stack.Pop
            Try
                ' Add all immediate file paths
                result.AddRange(Directory.GetFiles(dir, "*.*"))

                ' Loop through all subdirectories and add them to the stack.
                Dim directoryName As String
                For Each directoryName In Directory.GetDirectories(dir)
                    stack.Push(directoryName)
                Next

            Catch ex As Exception
            End Try
        Loop

        ' Return the list
        Return result
    End Function

Para la verificación de los checksums utilizo un timer.

Código:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Dim archivo As String = list.Item(conteo)
        If Not ProgressBar1.Value = ProgressBar1.Maximum Then
            Try

                TextBox1.Text = list.Item(conteo).ToString
            Catch ex As Exception
            End Try

            Try

                ProgressBar1.Increment(1)
                detected.Text = Conversions.ToString(FrmListaVirusDetectados.LstVirusDetectados.Items.Count)
                files.Text = Conversions.ToString(ProgressBar1.Value)

                Dim md5 As MD5CryptoServiceProvider = New MD5CryptoServiceProvider
                Dim f As FileStream = New FileStream(archivo, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
                f = New FileStream(archivo, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
                md5.ComputeHash(f)
                Dim hash As Byte() = md5.Hash
                Dim buff As StringBuilder = New StringBuilder
                Dim hashByte As Byte
                For Each hashByte In hash
                    buff.Append(String.Format("{0:X2}", hashByte))
                Next
                Dim a As Integer = Array.IndexOf(virusmd5, buff.ToString.ToLower)
                If a >= 0 Then
                    Dim contadordefilas As Integer = FrmListaDetectados.LstDetectados.Items.Count
                    FrmListaDetectados.LstDetectados.Items.Add(archivo)
                    FrmListaDetectados.LstDetectados.Items.Item(contadordefilas).SubItems.Add(nombre(a))
                End If
            Catch ex As Exception
            End Try
            If conteo < maximo - 1 Then
                conteo = conteo + 1
            End If
        Else

            Timer1.Stop()
            conteo = 0
            BtnDetenerEscaneo.Enabled = False
            MsgBox("Escaneo Finalizado")
            TabControl1.SelectTab(1)

            Label6.Text = ""
            Label4.Text = ""
            total.Text = ""
            detected.Text = ""
            files.Text = ""
            TextBox1.Clear()
            ProgressBar1.Value = 0
            If FrmListaDetectados.LstDetectados.Items.Count = 0 Then
                MsgBox("No se detectaron archivos conocidos", MsgBoxStyle.Information)
            Else
                FrmListaVirusDetectados.ShowDialog()
            End If
        End If
    End Sub
Espero exista alguna forma mas rapida en la busqueda y registro de los archivos existentes en la ubicación