吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3285|回复: 0
收起左侧

[C&C++ 转载] 资源文件写到硬盘执行后删除代码 适合调用

 关闭 [复制链接]
Victory.ms 发表于 2012-7-27 13:02
本帖最后由 Victory.ms 于 2012-7-27 13:05 编辑
//----------------------写出资源文件-----------------------------------
    HRSRC hRsrcInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_EXE), TEXT("MYEXE"));//得到资源信息的句柄
    if (NULL==hRsrcInfo)
    {
            DWORD dwErr = GetLastError();
            AfxMessageBox(TEXT("资源未找到"));
            return; // 失败
    }
        DWORD dwSize = SizeofResource(NULL, hRsrcInfo); 
        if (0 == dwSize)
        {
            AfxMessageBox(TEXT("资源大小错误"));
            return; // 失败
        }
        // 加载资源
        HGLOBAL hGlobal = LoadResource(NULL, hRsrcInfo);  
        if (NULL == hGlobal)
        {
            AfxMessageBox(TEXT("资源读取错误"));
            return; // 失败
        }
        // 锁定资源 
        LPVOID pBuffer = LockResource(hGlobal); 
        if (NULL == pBuffer)
        {
            AfxMessageBox(TEXT("资源锁定错误"));
            return; // 失败
        }
        // 写入到硬盘文件。这里我们简单的写入到硬盘文件
        HANDLE hFileNew = CreateFile(  TEXT("C:\\123.exe"),//直接写成"123.exe"也行
            GENERIC_READ|GENERIC_WRITE,
            FILE_SHARE_READ,
            NULL,
            CREATE_ALWAYS,
            FILE_ATTRIBUTE_NORMAL,
            NULL);
        if(INVALID_HANDLE_VALUE == hFileNew) 
        {
            AfxMessageBox(TEXT("文件创建错误"));
            return; // 失败
        }
        
        // 写文件
        DWORD dwlen=0;
        BOOL bRet = WriteFile(hFileNew, pBuffer, dwSize, &dwlen, NULL);
        if(!bRet ||dwSize!=dwlen)
        {
            AfxMessageBox(TEXT("文件写入错误"));
            return; // 失败
        }
        // 关闭文件
        CloseHandle(hFileNew);
        
        // 释放资源
        FreeResource(hGlobal);
//-------------------------执行写出的资源文件---------------------------------
        // 执行EXE
        STARTUPINFO si;
        PROCESS_INFORMATION pi;       
        ZeroMemory( &si, sizeof(si) );       
        si.cb = sizeof(si);        
        ZeroMemory( &pi, sizeof(pi) );
        if(!CreateProcess(TEXT("C:\\mtr.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
        {
             DWORD dwErr = GetLastError();
             AfxMessageBox(TEXT("执行EXE错误"));
             return; // 失败
        }

        // 等待EXE返回
        if(!WaitForSingleObject(pi.hProcess, INFINITE))
        {
            AfxMessageBox(TEXT("EXE已经结束 得到返回信息"));
            CloseHandle( pi.hProcess );
            CloseHandle( pi.hThread );
        }

//-------------------------删除写出的资源文件---------------------------------

        if(!DeleteFile(TEXT("mtr.exe")))
        {
            AfxMessageBox(TEXT("文件删除错误"));
            return;// 失败
        }
在资源文件中添加一个要写出的exe
IDexe:IDR_EXE
类型:MYEXE
把这个exe写出到C盘并且运行监视    如果这个exe进程结束后得到返回信息 以及删除文件
适合一些后台调用 配合Showwindow
最近见很多人都在找写出资源代码 就分享出来

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 16:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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