列举系统中所有被加载的DLL
2006-09-05 20:54
330 查看
void ShowProcessModules(HWND hwnd, DWORD PId)
{
SYSTEM_INFO si;
memset(&si, 0, sizeof(si));
GetSystemInfo( &si );
if( PId == 0)
PId = GetCurrentProcessId();
DWORD LowAddr, HighAddr;
LowAddr = (DWORD)si.lpMinimumApplicationAddress;
HighAddr = (DWORD)si.lpMaximumApplicationAddress;
HANDLE hdl = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,
FALSE, PId );
if (hdl == NULL)
return;
char mapfilename[MAX_PATH] = "unknown";
char tempname[MAX_PATH];
DWORD nSize = sizeof(mapfilename);
DWORD MapAddr, MapAddrto = 0;
for (MapAddr = LowAddr; MapAddr < HighAddr; MapAddr += si.dwAllocationGranularity)
{
GetMappedFileName( hdl, (LPVOID)MapAddr,mapfilename, nSize );
if(MapAddr < MapAddrto)
continue;
if(strlen(mapfilename) == 0)
continue;
for(MapAddrto = MapAddr; ; MapAddrto += si.dwPageSize)
{GetMappedFileName( hdl, (LPVOID)MapAddrto,tempname, nSize );
if(strcmp(tempname, mapfilename) == 0)
continue;
else
break;
}
wsprintf(tempname, "0x%p-0x%p: %s",MapAddr, MapAddrto, mapfilename);
SendMessage(GetDlgItem(hwnd,IDC_LIST1),LB_ADDSTRING,0,(LPARAM)tempname);
}
CloseHandle( hdl );
return;
}
{
SYSTEM_INFO si;
memset(&si, 0, sizeof(si));
GetSystemInfo( &si );
if( PId == 0)
PId = GetCurrentProcessId();
DWORD LowAddr, HighAddr;
LowAddr = (DWORD)si.lpMinimumApplicationAddress;
HighAddr = (DWORD)si.lpMaximumApplicationAddress;
HANDLE hdl = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,
FALSE, PId );
if (hdl == NULL)
return;
char mapfilename[MAX_PATH] = "unknown";
char tempname[MAX_PATH];
DWORD nSize = sizeof(mapfilename);
DWORD MapAddr, MapAddrto = 0;
for (MapAddr = LowAddr; MapAddr < HighAddr; MapAddr += si.dwAllocationGranularity)
{
GetMappedFileName( hdl, (LPVOID)MapAddr,mapfilename, nSize );
if(MapAddr < MapAddrto)
continue;
if(strlen(mapfilename) == 0)
continue;
for(MapAddrto = MapAddr; ; MapAddrto += si.dwPageSize)
{GetMappedFileName( hdl, (LPVOID)MapAddrto,tempname, nSize );
if(strcmp(tempname, mapfilename) == 0)
continue;
else
break;
}
wsprintf(tempname, "0x%p-0x%p: %s",MapAddr, MapAddrto, mapfilename);
SendMessage(GetDlgItem(hwnd,IDC_LIST1),LB_ADDSTRING,0,(LPARAM)tempname);
}
CloseHandle( hdl );
return;
}
相关文章推荐
- “无法加载安装程序库wbemupgd.dll,或是找不到函数OcEntry.请与您的系统管理员联系。特定错误码是 0x7e;" 然后是警告框: " 无法初始化应用程序。"
- 注册系统所有的dll文件.bat
- 动态加载 dll 枚举所有进程
- 客户应用程序调用COM API CoFreeUnusedLibraries()时,COM库遍历这个客户端应用已加载所有的DLL服务器并通过调用它的DllCanUnloadNow()函数查询每一个服务器
- EnumProcess(Source Code), 列举当前系统下所有进程
- 系统会优先在exe当前目录加载dll
- 动态加载dll,扩展系统功能
- 重新注册系统所有dll文件
- Symbian:列举系统当前所有进程 .
- 在grub 1.97中加载系统中所有硬盘中的所有操作系统–更新grub.cfg
- iOS, 列举出所有系统支持的Unicode编码
- Windows XP所有系统DLL、EXE、SYS文件
- C#动态加载dll扩展系统功能的方法
- 解决VC中动态加载DLL时,必须将DLL文件放在EXE文件路经和系统目录下的问题
- xp下用户程序空间分配(5):加载系统DLL
- windows核心编程-列举出当前系统中的所有进程和线程
- 列举系统安装的所有可用的数据库提供程序
- 注册系统目录下的所有的*.dll 文件
- 加载内核模块,实现新的系统调用:遍历系统当前所有进程的任务描述符,并将pid组织成树状结构显示
- apicloud git-svn 地址冲突,导致代码管理功能不可用.这个问题是由 windows 系统自身DLL加载机制引起的.一般重启电脑即可解决