Sysinternalsでファイルのデジタル署名を確認するためのコードに従っています
そこで、ファイルのハッシュ値を取得する必要があります。その部分では、次のコードを使用しています。
'Open file
Dim fs As FileStream = New FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read, 8)
'Get the size we need for our hash.
Dim fileHandle As IntPtr = fs.SafeFileHandle.DangerousGetHandle()
Dim hashSize As Integer
Dim hash As Byte() = New Byte(256) {}
Dim b As Boolean = CryptCATAdminCalcHashFromFileHandle(fileHandle, hashSize, Nothing, 0)
'check results
System.Console.WriteLine(fileHandle)
System.Console.WriteLine(hashSize)
System.Console.WriteLine(hash)
System.Console.WriteLine(b)
次のようにwintrust.dllを使用する
<DllImport("Wintrust.dll", PreserveSig:=True, SetLastError:=False)> _
Private Shared Function CryptCATAdminCalcHashFromFileHandle(ByRef fileHandle As IntPtr, ByVal hash As IntPtr, ByVal hashSize As Byte(), ByVal dwFlags As Integer) As Boolean
End Function
ファイルハンドルの出力は、実行ごとに異なる値を取得します (これは問題ありません)。ただし、ハッシュサイズとハッシュは常にゼロです。b は常に false です。
ここで何か不足していますか?ご意見をお聞かせください