remove old code to get proc_args

This commit is contained in:
Doug MacEachern 2004-08-03 02:58:48 +00:00
parent b8a09c70f0
commit 042c38ae95
1 changed files with 0 additions and 107 deletions

View File

@ -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)