BOOL
GetProcPath(
__in BOOL bCurrentProc,
__in ULONG ulPid,
__inout LPTSTR lpProcPath,
__in ULONG ulProcPathBufLen
)
{
BOOL bRet = FALSE;
HMODULE hModule = NULL;
HANDLE hProc = NULL;
DWORD dwProcPathLen = 0;
TCHAR tchProcPathDev[MAX_PATH] = {0};
TCHAR tchVolNameDev[MAX_PATH] = {0};
TCHAR tchVolName[MAX_PATH] = {0};
__try
{
if (!lpProcPath || !ulProcPathBufLen || (!bCurrentProc && !ulPid))
{
printf("[GetProcPath] : input parameter error \n");
__leave;
}
if (bCurrentProc)
{
if (!GetModuleFileName(NULL, lpProcPath, ulProcPathBufLen / sizeof(TCHAR)))
{
printf("[GetProcPath] : GetModuleFileName failed. (%d) \n", GetLastError());
__leave;
}
bRet = TRUE;
__leave;
}
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ulPid);
if (!hProc)
{
printf("[GetProcPath] : OpenProcess failed. (%d) \n", GetLastError());
__leave;
}
hModule = LoadLibrary(_T("Kernel32.dll"));
if (!hModule)
{
printf("[GetProcPath] : LoadLibrary failed. (%d) \n", GetLastError());
__leave;
}
if (GetProcAddress(hModule, "QueryFullProcessImageNameA"))
{
dwProcPathLen = ulProcPathBufLen / sizeof(TCHAR);
if (!QueryFullProcessImageName(hProc, 0, lpProcPath, &dwProcPathLen))
{
printf("[GetProcPath] : QueryFullProcessImageName failed. (%d) \n", GetLastError());
__leave;
}
bRet = TRUE;
__leave;
}
if (!GetProcessImageFileName(hProc, tchProcPathDev, MAX_PATH))
{
printf("[GetProcPath] : GetProcessImageFileName failed. (%d) \n", GetLastError());
__leave;
}
_tcscat_s(tchVolName, MAX_PATH, _T("A:"));
for (; *tchVolName <= _T('Z'); (*tchVolName)++)
{
memset(tchVolNameDev, 0, MAX_PATH * sizeof(TCHAR));
if (!QueryDosDevice(tchVolName, tchVolNameDev, MAX_PATH))
{
if (GetLastError() == 2)
continue;
else
{
printf("[GetProcPath] : QueryDosDevice failed. (%d) \n", GetLastError());
__leave;
}
}
if (_tcsncmp(tchProcPathDev, tchVolNameDev, _tcslen(tchVolNameDev)) == 0)
{
bRet = TRUE;
break;
}
}
if (bRet)
{
_tcscat_s(lpProcPath, ulProcPathBufLen / sizeof(TCHAR), tchVolName);
_tcscat_s(lpProcPath, ulProcPathBufLen / sizeof(TCHAR), tchProcPathDev + _tcslen(tchVolNameDev));
}
}
__finally
{
if (hModule)
FreeLibrary(hModule);
if (hProc)
CloseHandle(hProc);
}
return bRet;
}相关推荐
通过进程PID获取可执行文件全路径,提取路径中的文件名,提取文件名后缀、提取全路径中的目录、枚举进程加载模块dll
需要用到如下API 32位的程序调用此API同样能获取到64位进程的可执行文件路径。下面是微软在文档中的说明,由于该API很简单就不再复述了hProcess [in]A handle to the process. This handle must be created with the PROCESS_QUERY_INFORMATION or PROCESS_QUERY_LIMITED_INFORMATION access right. For more information, see Proces
wcscat_s、_tcscat_s异常
errno_t strcat_s( char *strDestination, size_t sizeInBytes, const char *strSource ); errno_t wcscat_s( wchar_t *strDestination, size_t sizeInWords, const wchar_t *strSource ); -...
获取应用程序全路径(进程全路径)
qt代码,可以获取运行的程序的全路径。一般人搜索关键字不对,搜进程全路径才能百度到相关的代码。资源分不多,感谢支持。
C++字符串--窄字节宽字节--Cstring
a=b 返回值0a>b 返回值>0a
内核中获取进程全路径
#include<ntifs.h> #include<ntddk.h> #include <ntstrsafe.h> #define MAX_PATH 260 NTSTATUS NTAPI ZwQueryInformationProcess( __in HANDLE ProcessHandle, __in PROCESSINFOCLASS ProcessInformationClass, __out_bcount(ProcessInformationLength) P
linux 内核获取进程全路径,linux内核获取进程的全路径3种方法
本文档的CopyRight归jonathan所有,可自由转载,转载时请保持文档的完整性。/*----------------------------------------------------------------------------------------------------------------------------*/在linux内核获取进程全路径方式类似Windows内核...
C++ 获取进程所在目录(全路径)
定位某个进程(比如 QQMusic.exe)所在的全路径,下面是代码: string GetProcessInfo(HANDLE hProcess,char* processName) { PROCESSENTRY32* pinfo = new PROCESSENTRY32; //进程信息 (pinfo->dwSize = sizeof(PROCESSENTRY32);) MODULEE...
linux 内核获取进程全路径,linux内核获取进程的全路径3种方法【转】
本文档的CopyRight归jonathan所有,可自由转载,转载时请保持文档的完整性。/*----------------------------------------------------------------------------------------------------------------------------*/在linux内核获取进程全路径方式类似Windows内核...
驱动获取进程全路径分析
用于指向一个结构体中关于进程参数的字段。在 Windows 内核中,每个进程都有一个。这些偏移量的定义允许开发者在内核驱动程序中灵活地定位并操作这些重要信息。结构体,它包含了与进程相关的各种信息。结构体中与进程映像路径(即进程可执行文件的路径)相关的字段。结构体中的特定成员。在内核模式中,如果你需要获取一个进程的。通常,通过结构体的偏移量来访问进程的参数和映像路径。结构体中获取与进程的启动参数(如命令行参数)相关的数据。可以用来获取进程加载的可执行文件的路径。或其他相关结构体中,结构体中的相关字段。
如何获取进程/目标对象的全路径?
PID->eprocess->KeStackAttachProcess->ZwQueryInformationProcess->ProcessImageFileName->ZwCreateFile ->ObReferenceObjectByHandle->RtlVolumeDeviceToDosName ->ZwQueryInformationFile 如何获取目标对象的全路径?
在驱动中获取进程全路径
在驱动中获取进程全路径 系统具备: WinDbg, Windows Symbol Packages (http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx下载) 取得EPROCESS(PsGetCurrentProcess();) 通过偏移量取得PEB, (Address + BASE_PROCESS_P
_tcscat_s遇到的问题
在改BUG的时候,使用了_tcscat_s,而工程竟然跑不起来了,当时使用如下: _tcscat_s(log_name.GetBuffer(), MAX_PATH, _T("log\\import.log")); 问题就出在了log_name.GetBuffer(), 把内存的长度定了,在连接就写出内存了,然后的情况就清楚了。。。
_tcscat_s函数的头文件
_tcscat_s函数的头文件:#include
_tcscat
用 _tcscat替代 strcat或 lstrcat
C++安全函数之strcat_s
1.必须包含的头文件:<string.h> 2.函数申明: errno_t strcat_s( char *strDestination, size_t numberOfElements, const char *strSource ); 3.参数介绍 strDestination Null 终止的目标字符串缓冲区。 numberOfElements 目标字符串缓冲...
关于XP没有QueryFullProcessImageName的问题(in ProcessInfo)
解决了windows核心编程源代码中ProcessInfo里面的一个关于XP没有QueryFullProcessImageName的问题,:)
2582




被折叠的 条评论
为什么被折叠?



