remove old code to get proc_args
This commit is contained in:
parent
b8a09c70f0
commit
042c38ae95
|
@ -809,112 +809,6 @@ static char *getarg(char **line)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* this was the first shot, works but injects a remote thread
|
|
||||||
* in the process. probably best to avoid that.
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* this is ugly, but there is no alternative.
|
|
||||||
* we spawn a remote thread within the process
|
|
||||||
* to call GetCommandLine() and parse it ourselves.
|
|
||||||
*/
|
|
||||||
static int sigar_remote_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
|
|
||||||
sigar_proc_args_t *procargs)
|
|
||||||
{
|
|
||||||
FARPROC rcmdline, fstrlen;
|
|
||||||
HANDLE proc, thread, kdll;
|
|
||||||
PVOID data=NULL;
|
|
||||||
char *cmdline;
|
|
||||||
DWORD rv, thrid, bytes, datalen=0;
|
|
||||||
|
|
||||||
if (!(kdll = GetModuleHandle("kernel32.dll"))) {
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(rcmdline = GetProcAddress(kdll, "GetCommandLineA"))) {
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(fstrlen = GetProcAddress(kdll, "lstrlenA"))) {
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(proc = OpenProcess(MAXIMUM_ALLOWED, 0, (DWORD)pid))) {
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
thread = CreateRemoteThread(proc, NULL, 0,
|
|
||||||
(LPTHREAD_START_ROUTINE)rcmdline,
|
|
||||||
0, 0, &thrid);
|
|
||||||
if (!thread) {
|
|
||||||
CloseHandle(proc);
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
WaitForSingleObject(thread, INFINITE);
|
|
||||||
GetExitCodeThread(thread, (LPDWORD)(&data));
|
|
||||||
CloseHandle(thread);
|
|
||||||
|
|
||||||
if (!data) {
|
|
||||||
CloseHandle(proc);
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
thread = CreateRemoteThread(proc, NULL, 0,
|
|
||||||
(LPTHREAD_START_ROUTINE)fstrlen,
|
|
||||||
data, 0, &thrid);
|
|
||||||
if (!thread) {
|
|
||||||
CloseHandle(proc);
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
WaitForSingleObject(thread, INFINITE);
|
|
||||||
GetExitCodeThread(thread, &datalen);
|
|
||||||
CloseHandle(thread);
|
|
||||||
|
|
||||||
if (!datalen) {
|
|
||||||
CloseHandle(proc);
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
datalen++; /* we want the \0 terminator too */
|
|
||||||
|
|
||||||
cmdline = HeapAlloc(GetProcessHeap(),
|
|
||||||
HEAP_ZERO_MEMORY,
|
|
||||||
datalen);
|
|
||||||
|
|
||||||
if (!cmdline) {
|
|
||||||
CloseHandle(proc);
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ReadProcessMemory(proc, data, cmdline,
|
|
||||||
datalen, &bytes))
|
|
||||||
{
|
|
||||||
char *arg, *ptr = cmdline;
|
|
||||||
|
|
||||||
sigar_proc_args_create(procargs);
|
|
||||||
|
|
||||||
while (*ptr && (arg = getarg(&ptr))) {
|
|
||||||
SIGAR_PROC_ARGS_GROW(procargs);
|
|
||||||
procargs->data[procargs->number++] = arg;
|
|
||||||
}
|
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, cmdline);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
CloseHandle(proc);
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
|
|
||||||
CloseHandle(proc);
|
|
||||||
return SIGAR_OK;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
/* second shot, using the PEB.
|
|
||||||
* read-only, minimum access privs and in general seems to work
|
|
||||||
* better than the method above. lets roll...
|
|
||||||
*/
|
|
||||||
static int sigar_remote_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
|
static int sigar_remote_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
sigar_proc_args_t *procargs)
|
sigar_proc_args_t *procargs)
|
||||||
{
|
{
|
||||||
|
@ -943,7 +837,6 @@ static int sigar_remote_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static int sigar_local_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
|
static int sigar_local_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
sigar_proc_args_t *procargs)
|
sigar_proc_args_t *procargs)
|
||||||
|
|
Loading…
Reference in New Issue