首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

进程插入的线程不停执行有关问题

2012-03-25 
进程插入的线程不停执行问题dll程序如下:#includewindows.h#includestringexternC __declspec(dllex

进程插入的线程不停执行问题
dll程序如下:
#include   <windows.h>
#include   <string>
extern   "C "   __declspec(dllexport)   __stdcall   int   DllSum(int   a,   int   b)
{
        for   (int   nL   =   0;   nL   <   3;   nL++)
        {
                char   str[256];
                sprintf(str, "dir   >   c:\\%d.txt ",   nL);
                system(str);
        }
}
BOOL   WINAPI   DllMain(   HINSTANCE   hinstDLL,DWORD   fdwReason,LPVOID   lpvReserved)
{
        DllSum(1,2);
        return   TRUE;
}
注入进程的代码:
        const   DWORD   THREADSIZE=1024*4;
        HANDLE   pRemoteThread,hRemoteProcess;
        PTHREAD_START_ROUTINE   pfnAddr,lpfnDllFunc1;
        DWORD   pId   =   0;
        void   *pFileRemote;
                                                                           
        HWND   hWinPro1=::FindWindow(NULL, "a.txt   -   &frac14;&Ccedil;&Ecirc;&Acirc;±&frac34; ");                                                                                                  
        if(!hWinPro1)
        {
                MessageBox( "Not   have   exp! ");
        }
        else
        {
                ::GetWindowThreadProcessId(hWinPro1,   &pId);   //&raquo;&ntilde;&micro;&Atilde;explorer&frac34;&auml;±ú
                hRemoteProcess=::OpenProcess(PROCESS_ALL_ACCESS,   false,   pId);    
                pFileRemote=::VirtualAllocEx(hRemoteProcess,   0,   THREADSIZE,   MEM_COMMIT|MEM_RESERVE,   PAGE_EXECUTE_READWRITE);
                if(!::WriteProcessMemory(hRemoteProcess,pFileRemote,   "c:\\a.dll ",   THREADSIZE,   NULL))
                {
                        return;
                }
                pfnAddr=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT( "Kernel32 ")),   "LoadLibraryA ");
                HINSTANCE   hDll;
                hDll   =   LoadLibrary( "c:\\a.dll ");


                pRemoteThread=::CreateRemoteThread(hRemoteProcess,NULL,0,pfnAddr,pFileRemote,0,NULL);
                DWORD   tt   =   GetLastError();
                if(pRemoteThread==NULL)
                {
                        return;
                }
                else   MessageBox( "success! ");
        }
问题是我现在执行程序的时候,只要记事本不关闭,就不停执行线程的内容。
还有我用vc6的process   viewer怎么看不到我的记事本进程里没有我的线程呢?

[解决办法]
新键一个DLL工程(不是MFC DLL),dllmain里的东西如下:
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//add your code here!
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;

热点排行