我正在使用SSDeep fuzzy.dll
对大量文件执行模糊散列。
如果我按顺序运行哈希,一切正常。如果我尝试使用多个线程,它会失败(应用程序终止,没有异常信息,日志中也没有任何内容)
我假设 DLL 不是线程安全的,并且一个线程正试图读取另一个的内存或类似的东西。
我想做的是让每个线程都有自己的dll“副本”。请注意,这不是一个实例——它都是静态/共享的——我只是想模拟如果同时运行两个引用 dll 的进程会发生什么——它们将拥有自己的内存空间等。 ..
在没有实际产生多个进程的情况下这可能吗?
<DllImport("C:\SSDeep\Fuzzy.dll",
EntryPoint:="fuzzy_hash_filename",
CallingConvention:=CallingConvention.Cdecl)>
Private Shared Function fuzzy_hash_filename(
<InAttribute(),
MarshalAsAttribute(UnmanagedType.LPStr)>
ByVal Filename As String,
ByVal Result As StringBuilder) As Integer
End Function
Public Shared Function FuzzyHash(Filename As String) As String
Dim Ret As New StringBuilder
Ret.Capacity = NativeConstants.FUZZY_MAX_RESULT
Dim Success = fuzzy_hash_filename(Filename, Ret)
If Success <> 0 Then
Throw New Exception("SSDeep fuzzy hashing failed")
End If
Return Ret.ToString
End Function