scandisk 发表于 2008-5-6 21:55:02

论坛新开!前来找MD5文件效验Func

记得之前有人发过调用md5deep.exe来检测文件的MD5值!!
之前的作者看到的话,贡献出宝贵的源码!!感激不尽!!!

[ 本帖最后由 scandisk 于 2008-5-10 14:00 编辑 ]

sanhen 发表于 2008-5-6 23:43:49

http://www.autoitx.com/forum.php?mod=viewthread&tid=273&extra=page%3D1

lamlp 发表于 2010-12-6 17:44:39

Func _MD5ForFile($sFile)
      Local $a_hCall = DllCall("kernel32.dll", "hwnd", "CreateFileW", _
                        "wstr", $sFile, _
                        "dword", 0x80000000, _ ; GENERIC_READ
                        "dword", 1, _ ; FILE_SHARE_READ
                        "ptr", 0, _
                        "dword", 3, _ ; OPEN_EXISTING
                        "dword", 0, _ ; SECURITY_ANONYMOUS
                        "ptr", 0)
      If @error Or $a_hCall = -1 Then
                Return SetError(1, 0, "")
      EndIf

      Local $hFile = $a_hCall
      $a_hCall = DllCall("kernel32.dll", "ptr", "CreateFileMappingW", _
                        "hwnd", $hFile, _
                        "dword", 0, _ ; default security descriptor
                        "dword", 2, _ ; PAGE_READONLY
                        "dword", 0, _
                        "dword", 0, _
                        "ptr", 0)
      If @error Or Not $a_hCall Then
                DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFile)
                Return SetError(2, 0, "")
      EndIf

      DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFile)
      Local $hFileMappingObject = $a_hCall
      $a_hCall = DllCall("kernel32.dll", "ptr", "MapViewOfFile", _
                        "hwnd", $hFileMappingObject, _
                        "dword", 4, _ ; FILE_MAP_READ
                        "dword", 0, _
                        "dword", 0, _
                        "dword", 0)
      If @error Or Not $a_hCall Then
                DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject)
                Return SetError(3, 0, "")
      EndIf

       Local $pFile = $a_hCall
       Local $iBufferSize = FileGetSize($sFile)
      Local $tMD5_CTX = DllStructCreate("dword i;" & _
                        "dword buf;" & _
                        "ubyte in;" & _
                        "ubyte digest")

      DllCall("advapi32.dll", "none", "MD5Init", "ptr", DllStructGetPtr($tMD5_CTX))
      If @error Then
                DllCall("kernel32.dll", "int", "UnmapViewOfFile", "ptr", $pFile)
                DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject)
                Return SetError(4, 0, "")
      EndIf

      DllCall("advapi32.dll", "none", "MD5Update", _
                        "ptr", DllStructGetPtr($tMD5_CTX), _
                        "ptr", $pFile, _
                        "dword", $iBufferSize)
      If @error Then
                DllCall("kernel32.dll", "int", "UnmapViewOfFile", "ptr", $pFile)
                DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject)
                Return SetError(5, 0, "")
      EndIf
       DllCall("advapi32.dll", "none", "MD5Final", "ptr", DllStructGetPtr($tMD5_CTX))

      If @error Then
                DllCall("kernel32.dll", "int", "UnmapViewOfFile", "ptr", $pFile)
                DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject)
                Return SetError(6, 0, "")
      EndIf
      DllCall("kernel32.dll", "int", "UnmapViewOfFile", "ptr", $pFile)
      DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject)
      Local $sMD5 = Hex(DllStructGetData($tMD5_CTX, "digest"))
      Return SetError(0, 0, $sMD5)

EndFunc   ;==>_MD5ForFile

htmgyv 发表于 2012-9-16 14:37:36

我也正在找呢。

x122672348 发表于 2017-4-12 11:53:15

这个好,喜欢
页: [1]
查看完整版本: 论坛新开!前来找MD5文件效验Func