请教怎么在程序中关闭别的进程中的DLL文件,让其释放掉,高手和版主来帮帮啊不知道是用那个API

请问如何在程序中关闭别的进程中的DLL文件,让其释放掉,高手和版主来帮帮啊不知道是用那个API
请问如何在程序中关闭别的进程中的DLL文件,让其释放掉,老妖你们高手和版主来帮帮啊不知道是用那个API
我只知道遍历进程和它的信息,在是关闭进程,但DLL我不知道怎么关闭。


------解决方案--------------------
#include <malloc.h>
#include <TlHelp32.h>
#ifdef UNICODE
#define EjectLib EjectLibW
#else
#define EjectLib EjectLibA
#endif // !UNICODE
//dwProcessId 进程id
//pszLibFile 库的绝对路径
BOOL WINAPI EjectLibW(DWORD dwProcessId,PCWSTR pszLibFile)
{
BOOL fOk=FALSE;//赋初值,假定函数失败
HANDLE hthSnapshot=NULL;
HANDLE hProcess=NULL,hThread=NULL;
__try
{
//获取进程快照
hthSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwProcessId);
if (hthSnapshot==NULL) __leave;
//获取注入dll的句柄
MODULEENTRY32W me={sizeof(me)};
BOOL fFound=FALSE;
BOOL fMoreMods=Module32FirstW(hthSnapshot,&me);
for(;fMoreMods;fMoreMods=Module32NextW(hthSnapshot,&me))//枚举进程模块判断是否为注入模块
{
fFound=(lstrcmpiW(me.szModule,pszLibFile)==0)||(lstrcmpiW(me.szExePath,pszLibFile)==0);
if(fFound)break;
}
if(!fFound)__leave;
//获得进程句柄
hProcess = OpenProcess(
PROCESS_QUERY_INFORMATION | // Required by Alpha
PROCESS_CREATE_THREAD |
PROCESS_VM_OPERATION, //可以使用CreateRemoteThread
FALSE,dwProcessId);
if(hProcess==NULL) __leave;
//获取Kernel32.dll中LoadLibraryW的真实地址
PTHREAD_START_ROUTINE pfnThreadRtn=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT( "Kernel32 ")), "FreeLibrary ");
if(pfnThreadRtn == NULL) __leave;
////建立远程线程调用LoadLibraryW
hThread=CreateRemoteThread(hProcess,NULL,0,pfnThreadRtn,me.modBaseAddr,0,NULL);
if (hThread==NULL) __leave;
//等待线程结束
WaitForSingleObject(hThread, INFINITE);
fOk=TRUE; //释放成功
}
__finally
{
//异常处理
if(hthSnapshot != NULL)
CloseHandle(hthSnapshot);
if(hThread != NULL)
CloseHandle(hThread);
if(hProcess != NULL)
CloseHandle(hProcess);
}
return(fOk);
}
///////////////////////////////////////////////////////////////////////////////
BOOL WINAPI EjectLibA(DWORD dwProcessId,PCSTR pszLibFile)
{
//分配Unicode格式下路径存储空间
PWSTR pszLibFileW=(PWSTR)_alloca((lstrlenA(pszLibFile) + 1) * sizeof(WCHAR));
//把ANSI路径名转换为Unicode格式
wsprintfW(pszLibFileW, L "%S ", pszLibFile);
//调用Unicode格式的函数
return(EjectLibW(dwProcessId, pszLibFileW));
}

------解决方案--------------------
mark
------解决方案--------------------
提供一种思路:高手看看对不对:
将所要关闭Dll的进程的exe文件,定位其导入表,将用到的Dll名称记录下来,然后用远程注入的方法(即是Y___Y(一叶障目)兄帖子中那样做)