以前也可以注入并显示窗口,但是一旦卸载则会导致宿主进程也被关闭,今天终于搞定卸载注入的DLL后不影响宿主进程。
源码在http://wooddoor.ys168.com的VC目录下的“远程注入、卸载.rar”【VC2008的工程】
注入器源码部分:
#include <tlhelp32.h>
namespace pathfileFun
{
//**************************************************************
//* GetCurrentDirectory得到的不一定是应用程序所在的目录!要得到应用程序所在的目录,这里有一个函数:
//*函数名: GetAppPath()
//*
//*
//*返回值 CString – 返回路径的形式是 C:/temp/
//功能 – 得到应用程序所在的路径,保存到strPathBuffer中
//*
//**************************************************************
inline CString WINAPI GetAppPath()
{
CString strPathBuffer;
TCHAR PathBuffer[MAX_PATH];
GetModuleFileName(AfxGetInstanceHandle(), PathBuffer, MAX_PATH);
strPathBuffer.Format(_T(“%s”),PathBuffer);
CString strAppPath=strPathBuffer.Mid(0,strPathBuffer.ReverseFind(_T(‘//’))+1);
return strAppPath;
};
//格式化路径,使得路径统一成以“/”结尾
inline CString FormatPath(CString strPath)
{
if ( strPath.Right(1) != _T(“//”) )
strPath += _T(“//”);
return strPath;
};
//从文件的全路径中获取文件所在的文件夹路径,返回的路径以“/”结尾
inline CString GetPathFromFile(CString FilePath)
{
return FilePath.Mid(0,FilePath.ReverseFind(_T(‘//’))+1);
};
//从文件的全路径中获取文件名(含后缀)
inline CString GetFileNameFromFilePath(CString FilePath)
{
return FilePath.Right(FilePath.GetLength() – FilePath.ReverseFind(_T(‘//’))+1);
};
}
//===========================================
//调整进程权限
bool EnablePrivilege(TCHAR* PrivilegeName,BOOL IsEnable)
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID luid;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOK