• 计算PE文件校验和


    // 计算PE校验和
    #include <ImageHlp.h>
    #pragma comment(lib,"Imagehlp.lib")
    void Getchecksum(TCHAR* pszPath)
    {
        /*
            Code by Lthis 转载请注明出处
        */
        DWORD dwHeaderSum, dwCheckSum;            // 一般PE文件中CheckSum字段存储的
                                                  // 是本代码中的dwHeaderSum获取的值
        // 打开文件
        HANDLE hFile = CreateFile(
            pszPath,                              // 文件路径
            GENERIC_READ | GENERIC_WRITE,
            FILE_SHARE_READ|FILE_SHARE_WRITE,
            NULL,
            OPEN_ALWAYS,
            FILE_ATTRIBUTE_NORMAL,
            NULL
            );
        if (hFile == INVALID_HANDLE_VALUE) return FALSE;
    
        // 获取文件大小
        DWORD dwLowSize        = 0;
        DWORD dwHighSize    = 0;
        dwLowSize = GetFileSize(hFile, &dwHighSize);
        if (INVALID_FILE_SIZE == dwLowSize)
        {
            CString strErr;
            strErr.Format(_T("GetFileSize错误,错误码:%d"), GetLastError());
            return FALSE;
        }
    
        LPBYTE lpBase = NULL;
    
        HANDLE hFileMapping = CreateFileMapping(
            hFile, 
            NULL, 
            PAGE_READWRITE, 
            0, 
            dwLowSize, 
            NULL
            );
        lpBase = (LPBYTE)::MapViewOfFile(
            hFileMapping,
            FILE_MAP_READ | FILE_MAP_WRITE,
            0, 0,    // 指定数据(就是指目标磁盘文件)中的哪个字节开始映射至内存
            0        // 如果设定的值是0,那么系统将从文件中的指定位移开始到整个文件的结尾的视图映射到地址空间
            );
        if (NULL == lpBase)
        {
            CString strErr;
            strErr.Format(_T("MapViewOfFile错误,错误码:%d"), GetLastError());
            MessageBox(0, strErr, 0, 0);
            return FALSE;
        }
    
        CheckSumMappedFile(lpBase, dwLowSize, &dwHeaderSum, &dwCheckSum);
        
        // 显示CheckSum
        m_strChkSum.Format(_T("%08X"), dwHeaderSum);
        m_edtChkSum.SetWindowText(m_strChkSum);
        
        // 清理工作
        ::UnmapViewOfFile(lpBase);
        CloseHandle(hFileMapping);
        CloseHandle(hFile);
    }
  • 相关阅读:
    xps插入图片
    xps文件的基本操作
    大家注意:升级 win8.1 火狐浏览器 谷歌浏览器 搜狗五笔输入法 都不能用啦
    CF4C_Registration system 题解
    CF1B_Spreadsheets 题解
    CSP-J/S 初赛知识点整理
    Nodejs在centos下的安装
    sqlserver2012 表分区
    adb unknown host service 这个问题的解决,转载
    char和nchar,varchar和nvarchar的区别(转载)
  • 原文地址:https://www.cnblogs.com/Lthis/p/4266642.html
Copyright © 2020-2023  润新知