• 计算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);
    }
  • 相关阅读:
    05.Linux Startup & Shutdown
    04.Linux Disk Partition & Mount Point
    03Oracle数据查询(二)
    02Oracle数据查询(一)
    01Oracle数据库系统环境搭建
    02域名的选择技巧与注册实战
    01快速认识阿里云网站建设
    Linux文件操作
    Linux目录操作
    Linux根目录介绍
  • 原文地址:https://www.cnblogs.com/Lthis/p/4266642.html
Copyright © 2020-2023  润新知