我们知道要获得加载到进程地址空间的某个模块的文件全路径可以用GetModuleFileName, 但是这个函数只能获得本进程内的模块的文件全路径,GetModuleFileName没有办法获的其他进程的中的模块的全路径。 如果想获加载到其他进程内的模块的文件全路径可以用:
DWORD GetModuleFileNameEx(HANDLE hProcess,
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize);
1、第一个参数是进程的句柄。
2、第二个参数是模块的Handle。如果传入NULL则传回进程对应的执行文件的全路径(于GetModuleFileName类似哦!)。这个句柄是怎么获得的呢。当然不能调用GetModuleHandle,因为GetModuleHanle得到的是本进程中指定模块的handle,对于这个句柄只有通过枚举进程中所有模块的句柄的方法来获得。调用API :
BOOL EnumProcessModules( HANDLE hProcess,
HMODULE *lphModule,
DWORD cb,
LPDWORD lpcbNeeded);
可以获得这个进程的所有Module的句柄(存放在数组lphModule里)。3、地三个参是存放要传回的指定模块的文件全路径。
4、第四个参数是lpFilename的长度。
注意:这两个API存在于Psapi.dll中,默认情况下VC6.0没有对这个dll做隐式链接。所以我们要显示连接这个dll,然后得到函数的入口地址。
没有评论:
发表评论