Reimplemented DebugBreakProcess.
[wine] / server / process.h
1 /*
2  * Wine server processes
3  *
4  * Copyright (C) 1999 Alexandre Julliard
5  */
6
7 #ifndef __WINE_SERVER_PROCESS_H
8 #define __WINE_SERVER_PROCESS_H
9
10 #include "object.h"
11
12 struct msg_queue;
13 struct atom_table;
14
15 /* process structures */
16
17 struct process_dll
18 {
19     struct process_dll  *next;            /* per-process dll list */
20     struct process_dll  *prev;
21     struct file         *file;            /* dll file */
22     void                *base;            /* dll base address (in process addr space) */
23     void                *name;            /* ptr to ptr to name (in process addr space) */
24     int                  dbg_offset;      /* debug info offset */
25     int                  dbg_size;        /* debug info size */
26 };
27
28 struct process
29 {
30     struct object        obj;             /* object header */
31     struct process      *next;            /* system-wide process list */
32     struct process      *prev;
33     struct process      *parent;          /* parent process */
34     struct thread       *thread_list;     /* head of the thread list */
35     struct thread       *debugger;        /* thread debugging this process */
36     struct object       *handles;         /* handle entries */
37     int                  exit_code;       /* process exit code */
38     int                  running_threads; /* number of threads running in this process */
39     struct timeval       start_time;      /* absolute time at process start */
40     struct timeval       end_time;        /* absolute time at process end */
41     int                  priority;        /* priority class */
42     int                  affinity;        /* process affinity mask */
43     int                  suspend;         /* global process suspend count */
44     int                  create_flags;    /* process creation flags */
45     struct console_input*console;         /* console input */
46     struct event        *init_event;      /* event for init done */
47     struct event        *idle_event;      /* event for input idle */
48     struct msg_queue    *queue;           /* main message queue */
49     struct atom_table   *atom_table;      /* pointer to local atom table */
50     struct process_dll   exe;             /* main exe file */
51     void                *ldt_copy;        /* pointer to LDT copy in client addr space */
52     void                *ldt_flags;       /* pointer to LDT flags in client addr space */
53 };
54
55 struct process_snapshot
56 {
57     struct process *process;  /* process ptr */
58     int             count;    /* process refcount */
59     int             threads;  /* number of threads */
60     int             priority; /* priority class */
61 };
62
63 struct module_snapshot
64 {
65     void           *base;     /* module base addr */
66 };
67
68 /* process functions */
69
70 extern struct thread *create_process( int fd );
71 extern struct process *get_process_from_id( void *id );
72 extern struct process *get_process_from_handle( handle_t handle, unsigned int access );
73 extern int process_set_debugger( struct process *process, struct thread *thread );
74 extern int debugger_detach( struct process* process, struct thread* debugger );
75
76 extern void add_process_thread( struct process *process,
77                                 struct thread *thread );
78 extern void remove_process_thread( struct process *process,
79                                    struct thread *thread );
80 extern void suspend_process( struct process *process );
81 extern void resume_process( struct process *process );
82 extern void kill_process( struct process *process, struct thread *skip, int exit_code );
83 extern void kill_console_processes( struct thread *renderer, int exit_code );
84 extern void kill_debugged_processes( struct thread *debugger, int exit_code );
85 extern void detach_debugged_processes( struct thread *debugger );
86 extern struct process_snapshot *process_snap( int *count );
87 extern struct module_snapshot *module_snap( struct process *process, int *count );
88
89 static inline void *get_process_id( struct process *process ) { return process; }
90
91 #endif  /* __WINE_SERVER_PROCESS_H */