无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6140|回复: 19
打印 上一主题 下一主题

相当难找的:SetCSum。。。。

[复制链接]
跳转到指定楼层
1#
发表于 2008-4-5 11:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
setcsum

当你需要往安装光盘里添加文件,接着在复制文件时提示 不是有效的 XXX 映像时,就需要用此工具将它修正了。。。。

很久没弄集成光盘了。。。

今天试着增加个主题后,出现此问题时,才猛然想到是这个问题。。。

所以,堆垛上来,各位分享

SETCSUM.rar

18.08 KB, 下载次数: 563, 下载积分: 无忧币 -2

2#
 楼主| 发表于 2008-4-5 11:42:26 | 只看该作者
D:\VS>setcsum vista.mst

SetCSUM v1.01, (c)2000 Jeremy Collake
http://www.collakesoftware.com
mailto:collake@charter.net
----------------------------------------------------------------------
.\vista.mst =
    Header Checksum:  001D76A1
    Correct Checksum: 001D76A1

Done!
D:\VS>setcsum vista.ms_
回复

使用道具 举报

3#
 楼主| 发表于 2008-4-5 11:49:30 | 只看该作者
SetCSUM v1.01, (c)2000 Jeremy Collake
http://www.collakesoftware.com
mailto:collake@charter.net
----------------------------------------------------------------------
Usage: SetCSUM filespec [/V] [/A]

/V = Verify only, do not prompt to set new checksum.
/A = Always set new checksum.

Non-PE files can be checksummed, but obviously cannot have the
checksum in the header set, since there is no PE header.
回复

使用道具 举报

4#
发表于 2008-4-5 12:05:17 | 只看该作者
给新增的文件添加验证信息?
回复

使用道具 举报

5#
 楼主| 发表于 2008-4-5 12:28:27 | 只看该作者
当然也可以用Peditor1.7

只是复杂了些,这个命令行来得快些
回复

使用道具 举报

6#
发表于 2008-4-5 13:43:10 | 只看该作者
这个工具N年前就收藏了,那时是修改XP安装背景画面时收藏的.
回复

使用道具 举报

7#
发表于 2008-4-5 15:42:54 | 只看该作者
到底是个什么工具呀.
回复

使用道具 举报

8#
发表于 2008-4-5 17:08:32 | 只看该作者
不错,我前几天为了找他还真忙活了很长时间呢
回复

使用道具 举报

9#
发表于 2008-4-5 18:47:06 | 只看该作者
已超出了我关心的领域,纯支持一下!
回复

使用道具 举报

10#
发表于 2008-4-5 19:22:50 | 只看该作者
○︿下完了~闪人...
﹀\
< \。。。。))))))...多谢分享!.. )
回复

使用道具 举报

11#
发表于 2008-4-20 22:48:06 | 只看该作者
不太会用,不过也支持一下。
回复

使用道具 举报

12#
发表于 2008-4-20 23:07:11 | 只看该作者
这里好人真多,顶大哥!!
回复

使用道具 举报

13#
发表于 2008-4-21 13:49:37 | 只看该作者
谢谢分享, 已经收藏 !
回复

使用道具 举报

14#
发表于 2008-4-21 18:58:44 | 只看该作者
修改校验和啊?modifype 8.43k,这个20k
回复

使用道具 举报

15#
发表于 2008-4-22 17:30:35 | 只看该作者
好东西呀。。

可惜不会用。。哟
回复

使用道具 举报

16#
发表于 2008-4-22 21:21:45 | 只看该作者
没用过,先下来试试!谢谢
回复

使用道具 举报

17#
发表于 2010-3-1 23:43:22 | 只看该作者
终于又找到了,谢谢楼主
回复

使用道具 举报

18#
发表于 2010-3-9 18:18:01 | 只看该作者
碰到过这种问题,下来个备用。
回复

使用道具 举报

19#
发表于 2010-3-9 18:24:49 | 只看该作者
没做过光盘,学习一下。
回复

使用道具 举报

20#
发表于 2010-3-28 07:37:34 | 只看该作者
/*  VC6 在Link中加入 Imagehlp.lib*/

/*
        SetCSUM v1.01, (c)2000 Jeremy Collake
        http://www.collakesoftware.com
        mailto:collake@charter.net
        --------------------------------------------------------------------------------

        This simple, console mode utility will verify, and optionally set, the correct
        checksum of Portable Executables (win32 EXE,DLL,OCX,SCR,etc..). This checksum
        is required to be accurate for NT device drivers and some system DLLs. C++
        source included.

        Usage:
       
          SetCSUM filespec [/A] [/V]

          filespec = directory name, a wildcard, or a specific filename.
          /A           = always set correct checksum in header.
          /V           = do not prompt to set correct checksum, verify only.

          Non-PE files can be checksummed, but obviously cannot have the
          checksum in the header set, since there is no PE header.

*/

#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<winuser.h>
#include<imagehlp.h>
#include<winnt.h>

#define ERROR_USAGE 1
#define ERROR_NOFILES 2
#define ERROR_USERQUIT 3

#define CHECKSUM_SET_ERROR 5
#define CHECKSUM_NOT_PE    6

bool DoesDirectoryExist(char *pDirName) {
        unsigned int nAttributes=0;
        if((nAttributes=GetFileAttributes(pDirName))==-1)
                return false;
        if((nAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0)
                return true;
        else return false;
}

int SetCorrectChecksum(char *szFile)
{
                HANDLE hFile;
                HANDLE hMapping;
                unsigned char *pView;
                DWORD dwHeaderSum;
                DWORD dwCorrectSum;
                PIMAGE_NT_HEADERS pNTHeader;
                PIMAGE_DOS_HEADER pDOS;               

                DWORD nFileSize;
                                               
                hFile=CreateFile(szFile,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
                if(hFile==INVALID_HANDLE_VALUE)
                {
                        return CHECKSUM_OPEN_FAILURE;
                }
                nFileSize=GetFileSize(hFile,NULL);
                hMapping=CreateFileMapping(hFile,0,PAGE_READWRITE,0,0,NULL);
                if(!hMapping)
                {
                        CloseHandle(hFile);
                        return CHECKSUM_MAP_FAILURE;
                }               
                pView=(unsigned char *)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
                if(!pView)
                {
                        CloseHandle(hMapping);
                        CloseHandle(hFile);
                        return CHECKSUM_MAPVIEW_FAILURE;
                }               
                pDOS=(PIMAGE_DOS_HEADER)pView;
                pNTHeader=(PIMAGE_NT_HEADERS)(pDOS->e_lfanew+(DWORD)pDOS);               
                if(pDOS->e_magic!=IMAGE_DOS_SIGNATURE
                        ||
                        IsBadReadPtr((void *)pNTHeader,sizeof(_IMAGE_OPTIONAL_HEADER))
                        ||
                        pNTHeader->Signature!=IMAGE_NT_SIGNATURE)
                {                       
                        UnmapViewOfFile((LPCVOID)pView);
                        CloseHandle(hMapping);
                        CloseHandle(hFile);
                        return CHECKSUM_NOT_PE;
                }                               
                pNTHeader=CheckSumMappedFile((LPVOID)pView,nFileSize,&dwHeaderSum,&dwCorrectSum);               
                pNTHeader->OptionalHeader.CheckSum=dwCorrectSum;
                pNTHeader=CheckSumMappedFile((LPVOID)pView,nFileSize,&dwHeaderSum,&dwCorrectSum);               
                printf("\n     Recompute\n     Header Checksum: %.8X\n     Correct Checksum: %.8X",dwHeaderSum,dwCorrectSum);
                UnmapViewOfFile((LPCVOID)pView);
                CloseHandle(hMapping);
                CloseHandle(hFile);                       
                if(dwHeaderSum!=dwCorrectSum)
                {                       
                        return CHECKSUM_SET_ERROR;
                }
                return CHECKSUM_SUCCESS;
               
}


int main(int argc, char **argv)
{
        WIN32_FIND_DATA FindData;
        HANDLE findHandle;
        char szFilespec[MAX_PATH*2];
        char szPath[MAX_PATH*2];
        char szFile[MAX_PATH*2];
        DWORD dwDesiredAccess=GENERIC_READ;
        DWORD flProtect=PAGE_READONLY;
        DWORD dwCorrectSum;
        DWORD dwHeaderSum;       
        bool bAlways=false;
        bool bVerifyOnly=false;

        printf("\n SetCSUM v1.01, (c)2000 Jeremy Collake");
        printf("\n http://www.collakesoftware.com");
        printf("\n mailto:collake@charter.net");
        printf("\n ----------------------------------------------------------------------");
        if(argc<2)
        {
showhelp:
                printf("\n Usage: SetCSUM filespec [/V] [/A]");
                printf("\n\n  /V = Verify only, do not prompt to set new checksum.");
                printf("\n  /A = Always set new checksum.");               
                printf("\n\n  Non-PE files can be checksummed, but obviously cannot have the");
                printf("\n  checksum in the header set, since there is no PE header.\n");
                return ERROR_USAGE;
        }               
        for(int nN=1;nN<argc;nN++)
        {
                if(argv[nN][0]=='/')
                {
                        if(toupper(argv[nN][1])=='A')
                        {
                                bAlways=true;
                        }
                        else if(toupper(argv[nN][1])=='V')
                        {
                                bVerifyOnly=true;
                        }
                        else if(toupper(argv[nN][1])=='?' || toupper(argv[nN][1])=='H')
                        {
                                goto showhelp;
                        }
                        else
                        {
                                printf("\n Unrecognized switch: %s.", argv[nN]);
                        }
                }
                else
                {                       
                        strcpy(szPath,argv[nN]);
                        strcpy(szFilespec,argv[nN]);       
                }
        }
        if(!DoesDirectoryExist(szPath))
        {                               
                if((strstr(szPath,"\\")!=NULL || strstr(szPath,"/")!=NULL) && strlen(szPath))
                {               
                        for(int nI=strlen(szPath)-1;
                                szPath[nI]!=0 && szPath[nI]!='\\' && szPath[nI]!='/' && nI>0;
                                nI--);               
                        szPath[nI]=0;
                }       
                else
                {
                        strcpy((char *)&szPath,".");
                }
        }
        else
        {
                if(szPath[strlen(szPath)-1]=='\\')
                {
                        szPath[strlen(szPath)-1]=0;
                }
                strcpy(szFilespec,szPath);
                strcat(szFilespec,"\\*.*");
        }
        findHandle=NULL;
        while(1)
        {               
                if(!findHandle)
                {
                        findHandle=FindFirstFile(szFilespec,&FindData);
                        if(findHandle==INVALID_HANDLE_VALUE)
                        {       
                                printf("\n No files found!\n");
                                return ERROR_NOFILES;
                        }       
                }
                else
                {
                        if(!FindNextFile(findHandle,&FindData))
                        {
                                break;
                        }                               
                }
                if((FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0)
                {
                        continue;
                }
                strcpy(szFile,szPath);
                strcat(szFile,"\\");
                strcat(szFile,FindData.cFileName);
                printf("\n %s = ",szFile);
                switch(MapFileAndCheckSum(szFile,&dwHeaderSum,&dwCorrectSum))
                {
                case CHECKSUM_SUCCESS:
                        printf("\n    Header Checksum:  %.8X\n    Correct Checksum: %.8X",dwHeaderSum,dwCorrectSum);                       
                        if(dwHeaderSum!=dwCorrectSum)
                        {
                                printf("\n    Checksums do not match!");
                        }
                        if(dwHeaderSum!=dwCorrectSum && !bVerifyOnly)
                        {
                                char ch=0;
                                if(!bAlways)
                                {                                       
                                        printf("\n     Set correct checksum in file? [Y/N/Q] ");
                                        do {
                                                ch=getch();
                                                ch=toupper(ch);
                                        } while(ch!='Y' && ch!='N' && ch!='Q');
                                        putch(ch);
                                }
                                if(bAlways || ch=='Y')
                                {
                                        switch(SetCorrectChecksum(szFile))
                                        {
                                        case CHECKSUM_OPEN_FAILURE:
                                                printf("\n     Error opening file! (03)");
                                                break;
                                        case CHECKSUM_MAP_FAILURE:
                                                printf("\n     Error mapping file! (03)");
                                                break;
                                        case CHECKSUM_MAPVIEW_FAILURE:
                                                printf("\n     Error creating view! (03)");
                                                break;
                                        case CHECKSUM_SET_ERROR:
                                                printf("\n     Error setting checksum! (03)");
                                                break;
                                        case CHECKSUM_NOT_PE:
                                                printf("\n     File is not Portable Executable (PE), cannot set checksum! (03)");
                                                break;
                                        default:
                                                printf("\n     Checksum set!");
                                        }
                                }                               
                                if(ch=='Q')
                                {
                                        printf("\n\n User quit.");
                                        return ERROR_USERQUIT;                                       
                                }                       
                        }
                        break;
                case CHECKSUM_OPEN_FAILURE:                       
                        printf(" Error opening file! (02)");
                        break;
                case CHECKSUM_MAP_FAILURE:
                        printf(" Error mapping file! (02)");
                        break;
                case CHECKSUM_MAPVIEW_FAILURE:
                        printf(" Error creating view! (02)");
                        break;
                case CHECKSUM_UNICODE_FAILURE:
                        printf(" Error converting filename to Unicode (02)");
                        break;
                default:
                        printf(" Unknown error!");
                        break;
                }                                       
        }
        printf("\n\n Done!");
        return ERROR_SUCCESS;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-15 20:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表