Enhancing toolhelp snaphost
Eric Pouech
eric.pouech at wanadoo.fr
Sat Feb 23 15:58:49 CST 2002
this patch enhances the process snapshots
now the parentID and process pathname are now filled in
A+
-------------- next part --------------
Name: thlp_pcs
ChangeLog: added the parent process ID and the path in the process snapshot
GenDate: 2002/02/23 21:34:08 UTC
ModifiedFiles: dlls/kernel/toolhelp.c server/protocol.def server/process.h server/process.c server/snapshot.c
AddedFiles:
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/kernel/toolhelp.c,v
retrieving revision 1.14
diff -u -u -r1.14 toolhelp.c
--- dlls/kernel/toolhelp.c 30 Nov 2001 18:46:43 -0000 1.14
+++ dlls/kernel/toolhelp.c 16 Feb 2002 22:05:17 -0000
@@ -287,6 +287,7 @@
{
req->handle = handle;
req->reset = first;
+ wine_server_set_reply( req, lppe->szExeFile, sizeof(lppe->szExeFile));
if ((ret = !wine_server_call_err( req )))
{
lppe->cntUsage = reply->count;
@@ -294,10 +295,10 @@
lppe->th32DefaultHeapID = 0; /* FIXME */
lppe->th32ModuleID = 0; /* FIXME */
lppe->cntThreads = reply->threads;
- lppe->th32ParentProcessID = 0; /* FIXME */
+ lppe->th32ParentProcessID = (DWORD)reply->ppid;
lppe->pcPriClassBase = reply->priority;
lppe->dwFlags = -1; /* FIXME */
- lppe->szExeFile[0] = 0; /* FIXME */
+ lppe->szExeFile[wine_server_reply_size(reply)] = 0;
}
}
SERVER_END_REQ;
Index: server/protocol.def
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/server/protocol.def,v
retrieving revision 1.24
diff -u -u -r1.24 protocol.def
--- server/protocol.def 9 Jan 2002 21:16:24 -0000 1.24
+++ server/protocol.def 21 Feb 2002 20:54:46 -0000
19 count; /* process usage count */
void* pid; /* process id */
+ void* ppid; /* process parent id */
int threads; /* number of threads */
int priority; /* process priority */
+ VARARG(name,string); /* process (path)name */
@END
Index: server/process.h
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/server/process.h,v
retrieving revision 1.24
diff -u -u -r1.24 process.h
--- server/process.h 4 Dec 2001 20:17:44 -0000 1.24
+++ server/process.h 21 Feb 2002 20:46:16 -0000
15_snapshot
{
struct process *process; /* process ptr */
+ struct process *parent; /* parent process */
int count; /* process refcount */
int threads; /* number of threads */
int priority; /* priority class */
+ char name[MAX_PATH];/* process name */
};
struct module_snapshot
Index: server/process.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/server/process.c,v
retrieving revision 1.76
diff -u -u -r1.76 process.c
--- server/process.c 20 Dec 2001 00:07:09 -0000 1.76
+++ server/process.c 23 Feb 2002 21:24:53 -0000
@@ -693,12 +707,24 @@
ptr = snapshot;
for (process = first_process; process; process = process->next)
{
+ int adr;
+
if (!process->running_threads) continue;
ptr->process = process;
ptr->threads = process->running_threads;
ptr->count = process->obj.refcount;
ptr->priority = process->priority;
+ ptr->parent = process->parent;
+ if (!process->exe.name ||
+ read_process_memory( process, process->exe.name, 1, &adr) != 1 ||
+ adr == 0 ||
+ read_process_memory( process, (void*)adr,
+ sizeof(ptr->name) / sizeof(int),
+ (int*)ptr->name) == 0)
+ ptr->name[0] = 0;
+
grab_object( process );
+ if (process->parent) grab_object( process->parent );
ptr++;
}
*count = running_processes;
Index: server/snapshot.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/server/snapshot.c,v
retrieving revision 1.12
diff -u -u -r1.12 snapshot.c
--- server/snapshot.c 20 Dec 2001 00:07:09 -0000 1.12
+++ server/snapshot.c 16 Feb 2002 22:08:05 -0000
@@ -112,8 +112,10 @@
ptr = &snapshot->processes[snapshot->process_pos++];
reply->count = ptr->count;
reply->pid = get_process_id( ptr->process );
+ reply->ppid = get_process_id( ptr->parent );
reply->threads = ptr->threads;
reply->priority = ptr->priority;
+ set_reply_data( ptr->name, strlen(ptr->name) );
return 1;
}
@@ -178,7 +180,11 @@
if (snapshot->process_count)
{
for (i = 0; i < snapshot->process_count; i++)
+ {
release_object( snapshot->processes[i].process );
+ if (snapshot->processes[i].parent)
+ release_object( snapshot->processes[i].parent );
+ }
free( snapshot->processes );
}
if (snapshot->thread_count)
More information about the wine-patches
mailing list