根据进程名 获取该进程的启动参数
如果一个进程已经启动,而且我们知道这个进程名,我们能否知道这个进程的启动参数呢?
例如:
程序A使用 ShellExecuteEx启动程序B,并传递一个启动参数(如“-check”),已知程序B的进程名是B.exe
这时程序C该如何获取到程序B的启动参数(“-check”)?
[解决办法]
用 CreateRemoteThread 在目标进程地址空间加载自己写的dll,在dll里用GetCommandLine API 获取,然后再送出来
[解决办法]
int WINAPI GetProcessCommandLine(DWORD dwPID, LPTSTR lpszCommandLine, DWORD dwByteOfSize)
{
HANDLE hProcess = ::OpenProcess(PROCESS_CREATE_THREAD
[解决办法]
PROCESS_VM_OPERATION
[解决办法]
PROCESS_VM_WRITE
[解决办法]
PROCESS_VM_READ, FALSE, dwPID);
if (!hProcess)
{
return 0;
}
DWORD dwThreadId = 0;
DWORD dwExitCode = 0;
DWORD dwReaded = 0;
HANDLE hThread = ::CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)GetCommandLine, NULL, 0, &dwThreadId);
if (hThread)
{
::WaitForSingleObject(hThread, INFINITE);
::GetExitCodeThread(hThread, &dwExitCode);
::ReadProcessMemory(hProcess, (LPCVOID)dwExitCode, lpszCommandLine, dwByteOfSize, &dwReaded);
}
return dwReaded;
}
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR szBuffer[256] = {0};
GetProcessCommandLine(628, szBuffer, sizeof(szBuffer)); //628改成你要获取的进程PID,
return 0;
}