Hello all, I had this problem and after quite a bit of hard work, I made a CRC check of processes. It combines a small amount of my own code with 2 or 3 other pieces of code I found via google.
Make a new class called CRC32.vb:
Make your own sub and put this in it:
This gets the CRC values of all processes one by one, very quickly. Formated_Crc_String is the CRC value of that process.
Here is how I use the crc to block an unwanted program:
Put this code in the same sub as above, right under Formated_Crc_String = Crc_Class.GetCrc32String(fs)
Replace CRheck string with the crc value of the unwanted program. Then set the whole sub into a loop upon form loading, or whenever...
Make a new class called CRC32.vb:
VB.NET:
Option Explicit On
Option Strict On
<System.Diagnostics.DebuggerStepThrough()> _
Friend Class CRC32
' This is v2 of the VB CRC32 algorithm provided by Paul
' (wpsjr1@succeed.net) - much quicker than the nasty
' original version I posted. Excellent work!
'Last edited by Jeff Ballard on 2008-10-16
'Added GetCrc32String which returns the properly formatted string
Private crc32Table() As Integer
Private Const BUFFER_SIZE As Integer = 1024I
Friend Function GetCrc32(ByRef stream As System.IO.FileStream) As Integer
Dim crc32Result As Integer = &HFFFFFFFF
Dim buffer(BUFFER_SIZE) As Byte
Dim readSize As Integer = BUFFER_SIZE
Dim count As Integer = stream.Read(buffer, 0I, readSize)
Dim i As Integer
Dim iLookup As Integer
Do While (count > 0I)
For i = 0I To count - 1I
iLookup = (crc32Result And &HFF) Xor buffer(i)
crc32Result = ((crc32Result And &HFFFFFF00) \ &H100) And &HFFFFFF ' nasty shr 8 with vb :/
crc32Result = crc32Result Xor crc32Table(iLookup)
Next i
count = stream.Read(buffer, 0I, readSize)
Loop
Return Not (crc32Result)
End Function
Friend Function GetCrc32String(ByRef stream As System.IO.FileStream) As String
Return String.Format("{0:X8}", GetCrc32(stream))
End Function
Friend Sub New()
' This is the official polynomial used by CRC32 in PKZip.
' Often the polynomial is shown reversed (04C11DB7).
Dim dwPolynomial As Integer = &HEDB88320
Dim i, j As Integer
ReDim crc32Table(256I)
Dim dwCrc As Integer
For i = 0I To 255I
dwCrc = i
For j = 8I To 1I Step -1I
If (dwCrc And 1I) > 0I Then
dwCrc = ((dwCrc And &HFFFFFFFE) \ 2I) And &H7FFFFFFF
dwCrc = dwCrc Xor dwPolynomial
Else
dwCrc = ((dwCrc And &HFFFFFFFE) \ 2I) And &H7FFFFFFF
End If
Next j
crc32Table(i) = dwCrc
Next i
End Sub
End Class
Make your own sub and put this in it:
VB.NET:
Dim ProcessList As System.Diagnostics.Process()
ProcessList = System.Diagnostics.Process.GetProcesses()
Try
For Each process As Process In ProcessList
For Each m As ProcessModule In process.Modules
Dim test As String = m.FileName
Dim fs = New FileStream(test, FileMode.Open, FileAccess.Read)
Dim Crc_Class As New CRC32
Dim Formated_Crc_String As String
Formated_Crc_String = Crc_Class.GetCrc32String(fs)
Next
Next
Catch ex As Exception
End Try
This gets the CRC values of all processes one by one, very quickly. Formated_Crc_String is the CRC value of that process.
Here is how I use the crc to block an unwanted program:
Put this code in the same sub as above, right under Formated_Crc_String = Crc_Class.GetCrc32String(fs)
VB.NET:
Dim CRCheck As String = "5E4BBC78"
If Formated_Crc_String = CRCheck Then
killProcess("program")
System.Diagnostics.Process.GetCurrentProcess.Kill()