#include "stdafx.h"
#include <string>
#include <Windows.h>
#include <wincrypt.h>
using namespace std;
string ComputeFileMD5(const TCHAR *szFilename)
{
HCRYPTPROV hCryptProv = 0;
HCRYPTHASH hHash = 0;
HANDLE hMapFile = 0;
BYTE bHash[0x7f];
DWORD dwHashLen = 16;
BYTE *pBuf;
string digest;
DWORD dwFileSize = 0, dwHighFileSize = 0;
HANDLE hFile = CreateFile(szFilename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (hFile == INVALID_HANDLE_VALUE)
{
return digest;
}
dwFileSize = GetFileSize(hFile, &dwHighFileSize);
hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE)
{
goto release;
}
if (CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTE