0

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 です。

ここで何か不足していますか?ご意見をお聞かせください

4

1 に答える 1

2

宣言は次のようになります。

<DllImport("Wintrust.dll", PreserveSig:=True, SetLastError:=False)> _
Private Shared Function CryptCATAdminCalcHashFromFileHandle(ByVal fileHandle As IntPtr, ByRef hashSize As Integer, ByVal hash As Byte(), ByVal dwFlags As Integer) As Boolean
End Function

バッファーのサイズに初期化hashSizeし、バッファーを関数に渡す必要があります。

hashSize = 256
Dim b As Boolean = CryptCATAdminCalcHashFromFileHandle(fileHandle, hashSize, hash, 0)

hashSize関数が完了すると、実際のハッシュ サイズを含むように更新する必要があります。

(私の VB は非常にさびているので、タイプミスをお詫びします。)

于 2012-09-26T18:34:49.517 に答える