Implemented thread and (partial) module snapshots, based on the work
of Andreas Mohr <amohr@student.ei.uni-stuttgart.de>.

diff --git a/server/process.c b/server/process.c
index 3cc87f6..c84672d 100644
--- a/server/process.c
+++ b/server/process.c
@@ -563,6 +563,7 @@
         if (!process->running_threads) continue;
         ptr->process  = process;
         ptr->threads  = process->running_threads;
+        ptr->count    = process->obj.refcount;
         ptr->priority = process->priority;
         grab_object( process );
         ptr++;
@@ -571,6 +572,25 @@
     return snapshot;
 }
 
+/* take a snapshot of the modules of a process */
+struct module_snapshot *module_snap( struct process *process, int *count )
+{
+    struct module_snapshot *snapshot, *ptr;
+    struct process_dll *dll;
+    int total = 0;
+
+    for (dll = &process->exe; dll; dll = dll->next) total++;
+    if (!(snapshot = mem_alloc( sizeof(*snapshot) * total ))) return NULL;
+
+    for (ptr = snapshot, dll = &process->exe; dll; dll = dll->next, ptr++)
+    {
+        ptr->base = dll->base;
+    }
+    *count = total;
+    return snapshot;
+}
+
+
 /* create a new process */
 DECL_HANDLER(new_process)
 {