#include<iostream.h>
#include<conio.h>
#include<windows.h>
#include<Winbase.h>
void main()
{

HWND hDlg1=NULL;
HWND fDlg2=NULL;
DWORD HOPS;
char DllPath[MAX_PATH]="C:\\insrete.dll";

hDlg1=FindWindow("Notepad","测试文档.txt - 记事本"); DWORD DAAA;
 HOPS=GetWindowThreadProcessId(hDlg1,&DAAA);
if(HOPS=NULL)
{
cout<<"shibai1";
}
else;
cout<<DAAA;
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,HOPS);
//获取进程句柄
cout<<hProcess;
//测试
if(hProcess=NULL)
{
cout<<"shibai2";
}
int cb=(1+lstrlen(DllPath))*sizeof(char);
//定义以下函数返回值
LPVOID sixty;
sixty=VirtualAllocEx(hProcess,NULL,cb,MEM_COMMIT,PAGE_READWRITE);//向分配的内存地址中写入insrete.dll
if(WriteProcessMemory(hProcess,sixty,(LPVOID)DllPath,cb,NULL)==0)
{
cout<<"shibai3";
}
语法没有错误,insrete.dll也存在,是不是我的dll文件有问题,还是其他问题?
好几天了,一直在纠结
本人菜鸟,代码写的很乱,请高手回答,感激不尽啊

解决方案 »

  1.   

    if(WriteProcessMemory(hProcess,sixty,(LPVOID)DllPath,cb,NULL)==0)
    {
     int n = GetLastError(); //看看什么问题,错误代码是多少
    cout<<"shibai3";
    }
      

  2.   

    嗯,GetLastError返回值为6,句柄无效
      

  3.   

    HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,HOPS);
    那就是你这句函数有错,估计不能用这个FLAG PROCESS_ALL_ACCESS 来调用
      

  4.   

    找到问题了,是VirtualAllocEx没有成功分配内存,返回值为NULL
      

  5.   

    最终的问题在这里
    HOPS=GetWindowThreadProcessId(hDlg1,&DAAA);
    原因:
     GetWindowThreadProcessId的返回值是线程ID(HOPS 的值),进程ID由变量DAAA返回,
    所以你的OpenProcess语句需要修改:OpenProcess(PROCESS_ALL_ACCESS,TRUE,DAAA);
      

  6.   

    嗯我错了,查了下,hProcess为NULL,应该是OpenProcess这块出错了,谢谢各位,小弟感激不尽