SSDeep を使用して、fuzzy.dll
多数のファイルに対してファジー ハッシュを実行しています。
ハッシュを順番に実行すると、すべて正常に動作します。複数のスレッドを使用しようとすると、フォールオーバーします (アプリは例外情報なしで終了し、ログには何も記録されません)
私は、DLL がスレッドセーフではなく、あるスレッドが別のスレッドのメモリなどを読み取ろうとしていると想定しています。
私がやりたいことは、各スレッドが独自の dll の「コピー」を持つことを許可することです。これはインスタンスそのものではないことに注意してください-すべて静的/共有です-dllを参照する2つのプロセスが同時に実行された場合に何が起こるかをエミュレートしたいだけです-それらには独自のメモリスペースがあります。 ..
実際に複数のプロセスを生成しなくても、これは可能ですか?
<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