获取进程模块
2012-01-05 12:57
120 查看
当我们要更新某一个DLL时,该DLL有可能正在被使用中,我们只有先找到正在使用该DLL的进程后,关闭进程才能更新DLL,
以下我采用的是枚举的方法。
#include <windows.h>
#include <tlhelp32.h>
void CheckDll(LPCTSTR dllName);
void Check(PROCESSENTRY32 *pe,LPCTSTR dllName);
int main(int argc, char* argv[])
{
LPCTSTR dllName="OneSoft.dll";
CheckDll(dllName);
return 0;
}
void CheckDll(LPCTSTR dllName)
{
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(pe32);
HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//建立所有进程快照
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot failed! \n");
return ;
}
BOOL bMore=::Process32First(hProcessSnap,&pe32);//获取第一个进程信息
while(bMore)
{
Check(&pe32,dllName);
bMore=::Process32Next(hProcessSnap,&pe32);//获取下一个进程信息
}
::CloseHandle(hProcessSnap);
}
void Check(PROCESSENTRY32 *pe,LPCTSTR dllName)
{
HANDLE hSnapshot;
MODULEENTRY32 md32;
hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE,pe->th32ProcessID );//建立指定进程的所有模块快照
BOOL bMore=Module32First( hSnapshot,&md32 ); //获取第一个模块信息
while(bMore)
{
if (lstrcmpi(md32.szModule,dllName)==0)//找到
{
HANDLE h = OpenProcess( PROCESS_ALL_ACCESS,false,pe->th32ProcessID );//打开进程
BOOL bSucced=TerminateProcess(h,0); //杀进程
CloseHandle( h );
}
bMore=Module32Next( hSnapshot, &md32 );//获取下一个模块信息
}
CloseHandle( hSnapshot );
}
以下我采用的是枚举的方法。
#include <windows.h>
#include <tlhelp32.h>
void CheckDll(LPCTSTR dllName);
void Check(PROCESSENTRY32 *pe,LPCTSTR dllName);
int main(int argc, char* argv[])
{
LPCTSTR dllName="OneSoft.dll";
CheckDll(dllName);
return 0;
}
void CheckDll(LPCTSTR dllName)
{
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(pe32);
HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//建立所有进程快照
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot failed! \n");
return ;
}
BOOL bMore=::Process32First(hProcessSnap,&pe32);//获取第一个进程信息
while(bMore)
{
Check(&pe32,dllName);
bMore=::Process32Next(hProcessSnap,&pe32);//获取下一个进程信息
}
::CloseHandle(hProcessSnap);
}
void Check(PROCESSENTRY32 *pe,LPCTSTR dllName)
{
HANDLE hSnapshot;
MODULEENTRY32 md32;
hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE,pe->th32ProcessID );//建立指定进程的所有模块快照
BOOL bMore=Module32First( hSnapshot,&md32 ); //获取第一个模块信息
while(bMore)
{
if (lstrcmpi(md32.szModule,dllName)==0)//找到
{
HANDLE h = OpenProcess( PROCESS_ALL_ACCESS,false,pe->th32ProcessID );//打开进程
BOOL bSucced=TerminateProcess(h,0); //杀进程
CloseHandle( h );
}
bMore=Module32Next( hSnapshot, &md32 );//获取下一个模块信息
}
CloseHandle( hSnapshot );
}
相关文章推荐
- 获取进程加载的dll模块
- 获取当前进程目录 GetCurrentDirectory() 及 获取当前运行模块路径名GetModuleFileName()
- 【API】获取进程的所有模块名
- Windows-核心编程-04-进程-获取进程 线程 模块(DLL)信息
- 获取指定进程所有线程的当前执行模块
- 【API】获取进程的所有模块名
- 进程的创建 获取信息 进程模块信息 结束等候进程 windows工作等14.4.28
- 写自己的内核模块——获取一个进程的物理地址
- 枚举PEB获取进程模块列表
- 获取系统进程模块信息
- 驱动层 完成获取进程网络流量模块(总结)
- 枚举PEB获取进程模块列表
- 根据进程结合GetModuleHandle获取当前主模块句柄
- C++ 获取当前进程加载模块的完整路径读取配置文件
- 用户层获取TEB PEB结构地址 遍历进程模块.doc
- linux/android进程的模块信息获取
- 根据进程结合GetModuleHandle获取当前主模块的句柄
- 获取进程模块的信息
- GetModuleFileName获取当前进程已加载模块的文件的完整路径
- VB 获取进程/模块信息 批量结束进程的代码