通过进程ID获取执行文件路径
来源:互联网 发布:洛阳商通网络 编辑:程序博客网 时间:2024/05/15 07:46
// Process.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
BOOL GetProcessPath(UINT uProcessID, LPSTR szProcessName, DWORD dwSize)
{
typedef BOOL (__stdcall *EnumProcessModules_TYPE) (
HANDLE hProcess,
HMODULE* lphModule,
DWORD cb,
LPDWORD lpcbNeeded
);
EnumProcessModules_TYPE _EnumProcessModules = NULL;
HMODULE *pMods = NULL;
DWORD cbNeedSize = 0;
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, uProcessID);
if (hProcess == NULL) {
return FALSE;
}
HMODULE hPsapi = LoadLibrary("psapi.dll");
if (hPsapi == NULL) {
CloseHandle(hProcess);
return FALSE;
}
_EnumProcessModules = (EnumProcessModules_TYPE)GetProcAddress(hPsapi, "EnumProcessModules");
if (_EnumProcessModules == NULL) {
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return FALSE;
}
if (!_EnumProcessModules(hProcess, pMods, 0, &cbNeedSize)) {
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return FALSE;
}
pMods = (HMODULE*)LocalAlloc(LPTR, cbNeedSize);
if (!_EnumProcessModules(hProcess, pMods, 0, &cbNeedSize)) {
CloseHandle(hProcess);
FreeLibrary(hPsapi);
LocalFree(pMods);
return FALSE;
}
typedef DWORD (__stdcall *GetModuleFileNameEx_TYPE) (
HANDLE hProcess,
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
GetModuleFileNameEx_TYPE _GetModuleFileNameEx;
_GetModuleFileNameEx = (GetModuleFileNameEx_TYPE)GetProcAddress(hPsapi, "GetModuleFileNameExA");
if (_GetModuleFileNameEx == NULL) {
LocalFree(pMods);
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return FALSE;
}
if (!_GetModuleFileNameEx(hProcess, pMods[0], szProcessName, dwSize)) {
LocalFree(pMods);
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return FALSE;
}
LocalFree(pMods);
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return TRUE;
}
int main(int argc, char* argv[])
{
CHAR szProcessName[MAX_PATH];
GetProcessPath(0x1fc, szProcessName, MAX_PATH);
return 0;
}
//
#include "stdafx.h"
#include <windows.h>
BOOL GetProcessPath(UINT uProcessID, LPSTR szProcessName, DWORD dwSize)
{
typedef BOOL (__stdcall *EnumProcessModules_TYPE) (
HANDLE hProcess,
HMODULE* lphModule,
DWORD cb,
LPDWORD lpcbNeeded
);
EnumProcessModules_TYPE _EnumProcessModules = NULL;
HMODULE *pMods = NULL;
DWORD cbNeedSize = 0;
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, uProcessID);
if (hProcess == NULL) {
return FALSE;
}
HMODULE hPsapi = LoadLibrary("psapi.dll");
if (hPsapi == NULL) {
CloseHandle(hProcess);
return FALSE;
}
_EnumProcessModules = (EnumProcessModules_TYPE)GetProcAddress(hPsapi, "EnumProcessModules");
if (_EnumProcessModules == NULL) {
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return FALSE;
}
if (!_EnumProcessModules(hProcess, pMods, 0, &cbNeedSize)) {
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return FALSE;
}
pMods = (HMODULE*)LocalAlloc(LPTR, cbNeedSize);
if (!_EnumProcessModules(hProcess, pMods, 0, &cbNeedSize)) {
CloseHandle(hProcess);
FreeLibrary(hPsapi);
LocalFree(pMods);
return FALSE;
}
typedef DWORD (__stdcall *GetModuleFileNameEx_TYPE) (
HANDLE hProcess,
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
GetModuleFileNameEx_TYPE _GetModuleFileNameEx;
_GetModuleFileNameEx = (GetModuleFileNameEx_TYPE)GetProcAddress(hPsapi, "GetModuleFileNameExA");
if (_GetModuleFileNameEx == NULL) {
LocalFree(pMods);
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return FALSE;
}
if (!_GetModuleFileNameEx(hProcess, pMods[0], szProcessName, dwSize)) {
LocalFree(pMods);
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return FALSE;
}
LocalFree(pMods);
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return TRUE;
}
int main(int argc, char* argv[])
{
CHAR szProcessName[MAX_PATH];
GetProcessPath(0x1fc, szProcessName, MAX_PATH);
return 0;
}
- 通过进程ID获取执行文件路径
- 获取linux进程的执行文件路径
- VC下通过进程ID获取进程镜像文件路径的方法及其存在的缺陷
- delphi根据进程ID获取进程路径
- 如何获取linux进程的执行文件路径
- 如何获取linux进程的执行文件路径
- 获取执行文件路径
- 如何通过进程ID获取进程名
- 通过进程名获取进程ID
- linux通过进程名获取进程id
- 通过进程ID获取进程名
- 通过进程名获取进程ID
- 通过进程名获取进程id
- 进程管理:通过父进程ID获取子进程ID
- Visual Basic 通过PID获取进程文件路径
- 通过进程获取目标路径
- 根据进程ID获取exe路径
- 通过进程ID获取基地址
- 使用 arrayadapter 来 filter 一个 listview
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- ios uitableview 刷新某一个cell 或 section
- 程序员学英语三部曲
- C++ 函数参数的默认值
- 通过进程ID获取执行文件路径
- TCP状态知识总结(图解)
- MYSQL常用语法
- c++之多态性动态数组的使用
- JAVA 生成二维码 代码
- Mac OS X下删除或添加鼠标右键菜单项目及清除Mac OS右键菜单重复项
- JNI的基本使用方法
- 详解C#委托,事件与回调函数
- HDU Buy the Ticket