试下这样
CString strDllName = "C:\\MsgDll.dll";
LPVOID lpRemoteDllName = VirtualAllocEx(
hProcess,
NULL,
strDllName.GetLength()+sizeof(TCHAR),
MEM_COMMIT,
PAGE_READWRITE
);
if (lpRemoteDllName == NULL)
{
MessageBox("向目标进程申请内存失败!");
}
//下面将写入.
SIZE_T dwWirte;
BOOL IsWrite = WriteProcessMemory(hProcess,lpRemoteDllName,strDllName.GetBuffer(strDllName.GetLength()),
strDllName.GetLength()+sizeof(TCHAR),&dwWirte);
CString strDllName = "C:\\MsgDll.dll";
LPVOID lpRemoteDllName = VirtualAllocEx(
hProcess,
NULL,
strDllName.GetLength()+sizeof(TCHAR),
MEM_COMMIT,
PAGE_READWRITE
);
if (lpRemoteDllName == NULL)
{
MessageBox("向目标进程申请内存失败!");
}
//下面将写入.
SIZE_T dwWirte;
BOOL IsWrite = WriteProcessMemory(hProcess,lpRemoteDllName,strDllName.GetBuffer(strDllName.GetLength()),
strDllName.GetLength()+sizeof(TCHAR),&dwWirte);
原因有很多个:
1.当前进程的权限问题。
2.你的程序和dll必须和要注入的进程同为32位或同为64位
3.win7比XP更安全,这些不安全的API函数CreateRemoteThread在使用上限制更多了,据说CreateRemoteThread只能注入到当前进程创建的进程中。当然也不是说就没办法实现了,办法还是有的,要稍微绕一下路。
参考:http://blog.csdn.net/wxdvc/article/details/8116193