Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Wine server objects |
| 3 | * |
| 4 | * Copyright (C) 1998 Alexandre Julliard |
Alexandre Julliard | 0799c1a | 2002-03-09 23:29:33 +0000 | [diff] [blame] | 5 | * |
| 6 | * This library is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU Lesser General Public |
| 8 | * License as published by the Free Software Foundation; either |
| 9 | * version 2.1 of the License, or (at your option) any later version. |
| 10 | * |
| 11 | * This library is distributed in the hope that it will be useful, |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 14 | * Lesser General Public License for more details. |
| 15 | * |
| 16 | * You should have received a copy of the GNU Lesser General Public |
| 17 | * License along with this library; if not, write to the Free Software |
Jonathan Ernst | 360a3f9 | 2006-05-18 14:49:52 +0200 | [diff] [blame] | 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 19 | */ |
| 20 | |
| 21 | #ifndef __WINE_SERVER_OBJECT_H |
| 22 | #define __WINE_SERVER_OBJECT_H |
| 23 | |
Steven Edwards | 037c8a1 | 2003-02-11 22:27:13 +0000 | [diff] [blame] | 24 | #ifdef HAVE_SYS_POLL_H |
Alexandre Julliard | 247b8ae | 1999-12-13 00:16:44 +0000 | [diff] [blame] | 25 | #include <sys/poll.h> |
Steven Edwards | 037c8a1 | 2003-02-11 22:27:13 +0000 | [diff] [blame] | 26 | #endif |
| 27 | |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 28 | #include <sys/time.h> |
Alexandre Julliard | 37ec927 | 2001-07-19 00:35:37 +0000 | [diff] [blame] | 29 | #include "wine/server_protocol.h" |
Alexandre Julliard | ef5f6c7 | 2003-09-11 20:45:17 +0000 | [diff] [blame] | 30 | #include "wine/list.h" |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 31 | |
Alexandre Julliard | 1bdd154 | 1999-06-04 19:47:04 +0000 | [diff] [blame] | 32 | #define DEBUG_OBJECTS |
| 33 | |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 34 | /* kernel objects */ |
| 35 | |
Alexandre Julliard | 526a28d | 2002-10-02 23:49:30 +0000 | [diff] [blame] | 36 | struct namespace; |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 37 | struct object; |
| 38 | struct object_name; |
Alexandre Julliard | 85ed45e | 1998-08-22 19:03:56 +0000 | [diff] [blame] | 39 | struct thread; |
Alexandre Julliard | fdc92ba | 1999-02-14 18:03:15 +0000 | [diff] [blame] | 40 | struct process; |
Mike McCormack | 36cd6f5 | 2003-07-24 00:07:00 +0000 | [diff] [blame] | 41 | struct token; |
Alexandre Julliard | a8b8d9c | 1999-01-01 16:59:27 +0000 | [diff] [blame] | 42 | struct file; |
Alexandre Julliard | c6e45ed | 1998-12-27 08:35:39 +0000 | [diff] [blame] | 43 | struct wait_queue_entry; |
Mike McCormack | 1eac191 | 2000-11-13 19:27:21 +0000 | [diff] [blame] | 44 | struct async; |
Mike McCormack | 6f011c0 | 2001-12-20 00:07:05 +0000 | [diff] [blame] | 45 | struct async_queue; |
Alexandre Julliard | c3ac57d | 2005-07-08 14:23:27 +0000 | [diff] [blame] | 46 | struct winstation; |
Vitaliy Margolen | 3c6bdcc | 2005-11-29 17:21:05 +0100 | [diff] [blame] | 47 | struct directory; |
Alexandre Julliard | 8382eb0 | 2007-12-05 18:16:42 +0100 | [diff] [blame] | 48 | struct object_type; |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 49 | |
Vitaliy Margolen | baffcb9 | 2005-11-22 14:55:42 +0000 | [diff] [blame] | 50 | |
| 51 | struct unicode_str |
| 52 | { |
| 53 | const WCHAR *str; |
Alexandre Julliard | 0f273c1 | 2006-07-26 10:43:25 +0200 | [diff] [blame] | 54 | data_size_t len; |
Vitaliy Margolen | baffcb9 | 2005-11-22 14:55:42 +0000 | [diff] [blame] | 55 | }; |
| 56 | |
Alexandre Julliard | 0562539 | 1999-01-03 11:55:56 +0000 | [diff] [blame] | 57 | /* operations valid on all objects */ |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 58 | struct object_ops |
| 59 | { |
Alexandre Julliard | 5bc7808 | 1999-06-22 17:26:53 +0000 | [diff] [blame] | 60 | /* size of this object type */ |
| 61 | size_t size; |
Alexandre Julliard | c6e45ed | 1998-12-27 08:35:39 +0000 | [diff] [blame] | 62 | /* dump the object (for debugging) */ |
| 63 | void (*dump)(struct object *,int); |
Alexandre Julliard | 8382eb0 | 2007-12-05 18:16:42 +0100 | [diff] [blame] | 64 | /* return the object type */ |
| 65 | struct object_type *(*get_type)(struct object *); |
Alexandre Julliard | c6e45ed | 1998-12-27 08:35:39 +0000 | [diff] [blame] | 66 | /* add a thread to the object wait queue */ |
Alexandre Julliard | a8b8d9c | 1999-01-01 16:59:27 +0000 | [diff] [blame] | 67 | int (*add_queue)(struct object *,struct wait_queue_entry *); |
Alexandre Julliard | c6e45ed | 1998-12-27 08:35:39 +0000 | [diff] [blame] | 68 | /* remove a thread from the object wait queue */ |
| 69 | void (*remove_queue)(struct object *,struct wait_queue_entry *); |
| 70 | /* is object signaled? */ |
| 71 | int (*signaled)(struct object *,struct thread *); |
| 72 | /* wait satisfied; return 1 if abandoned */ |
| 73 | int (*satisfied)(struct object *,struct thread *); |
Mike McCormack | f92fff6 | 2005-04-24 17:35:52 +0000 | [diff] [blame] | 74 | /* signal an object */ |
| 75 | int (*signal)(struct object *, unsigned int); |
Alexandre Julliard | 863637b | 2003-01-30 00:26:44 +0000 | [diff] [blame] | 76 | /* return an fd object that can be used to read/write from the object */ |
| 77 | struct fd *(*get_fd)(struct object *); |
Alexandre Julliard | 28beba3 | 2005-12-12 14:57:40 +0100 | [diff] [blame] | 78 | /* map access rights to the specific rights for this object */ |
| 79 | unsigned int (*map_access)(struct object *, unsigned int); |
Rob Shearman | c1707d8 | 2007-10-03 13:10:37 +0100 | [diff] [blame] | 80 | /* returns the security descriptor of the object */ |
| 81 | struct security_descriptor *(*get_sd)( struct object * ); |
| 82 | /* sets the security descriptor of the object */ |
| 83 | int (*set_sd)( struct object *, const struct security_descriptor *, unsigned int ); |
Vitaliy Margolen | baffcb9 | 2005-11-22 14:55:42 +0000 | [diff] [blame] | 84 | /* lookup a name if an object has a namespace */ |
| 85 | struct object *(*lookup_name)(struct object *, struct unicode_str *,unsigned int); |
Alexandre Julliard | 7e71c1d | 2007-03-22 11:44:29 +0100 | [diff] [blame] | 86 | /* open a file object to access this object */ |
| 87 | struct object *(*open_file)(struct object *, unsigned int access, unsigned int sharing, |
| 88 | unsigned int options); |
Alexandre Julliard | b9b1ea9 | 2005-06-09 15:39:52 +0000 | [diff] [blame] | 89 | /* close a handle to this object */ |
| 90 | int (*close_handle)(struct object *,struct process *,obj_handle_t); |
Alexandre Julliard | c6e45ed | 1998-12-27 08:35:39 +0000 | [diff] [blame] | 91 | /* destroy on refcount == 0 */ |
| 92 | void (*destroy)(struct object *); |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 93 | }; |
| 94 | |
| 95 | struct object |
| 96 | { |
Alexandre Julliard | 1dca5e2 | 2000-01-01 00:56:27 +0000 | [diff] [blame] | 97 | unsigned int refcount; /* reference count */ |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 98 | const struct object_ops *ops; |
Alexandre Julliard | aa34768 | 2005-03-01 11:49:58 +0000 | [diff] [blame] | 99 | struct list wait_queue; |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 100 | struct object_name *name; |
Vitaliy Margolen | 5ec1718 | 2007-02-06 21:44:15 -0700 | [diff] [blame] | 101 | struct security_descriptor *sd; |
Alexandre Julliard | 1bdd154 | 1999-06-04 19:47:04 +0000 | [diff] [blame] | 102 | #ifdef DEBUG_OBJECTS |
Alexandre Julliard | 526a28d | 2002-10-02 23:49:30 +0000 | [diff] [blame] | 103 | struct list obj_list; |
Alexandre Julliard | 1bdd154 | 1999-06-04 19:47:04 +0000 | [diff] [blame] | 104 | #endif |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 105 | }; |
| 106 | |
Alexandre Julliard | c5e433a | 2000-05-30 19:48:18 +0000 | [diff] [blame] | 107 | struct wait_queue_entry |
| 108 | { |
Alexandre Julliard | aa34768 | 2005-03-01 11:49:58 +0000 | [diff] [blame] | 109 | struct list entry; |
| 110 | struct object *obj; |
| 111 | struct thread *thread; |
Alexandre Julliard | c5e433a | 2000-05-30 19:48:18 +0000 | [diff] [blame] | 112 | }; |
| 113 | |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 114 | extern void *mem_alloc( size_t size ); /* malloc wrapper */ |
Alexandre Julliard | d7e85d6 | 1999-11-23 19:39:11 +0000 | [diff] [blame] | 115 | extern void *memdup( const void *data, size_t len ); |
Alexandre Julliard | e66207e | 2003-02-19 00:33:32 +0000 | [diff] [blame] | 116 | extern void *alloc_object( const struct object_ops *ops ); |
Alexandre Julliard | 0f273c1 | 2006-07-26 10:43:25 +0200 | [diff] [blame] | 117 | extern const WCHAR *get_object_name( struct object *obj, data_size_t *len ); |
Alexandre Julliard | 658dae9 | 2010-01-08 13:01:50 +0100 | [diff] [blame] | 118 | extern WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len ); |
Alexandre Julliard | d16319c | 1999-11-25 21:30:24 +0000 | [diff] [blame] | 119 | extern void dump_object_name( struct object *obj ); |
Vitaliy Margolen | 3c6bdcc | 2005-11-29 17:21:05 +0100 | [diff] [blame] | 120 | extern void *create_object( struct namespace *namespace, const struct object_ops *ops, |
| 121 | const struct unicode_str *name, struct object *parent ); |
Alexandre Julliard | 526a28d | 2002-10-02 23:49:30 +0000 | [diff] [blame] | 122 | extern void *create_named_object( struct namespace *namespace, const struct object_ops *ops, |
Alexandre Julliard | ead9b06 | 2005-11-18 16:31:18 +0000 | [diff] [blame] | 123 | const struct unicode_str *name, unsigned int attributes ); |
Alexandre Julliard | 8cea993 | 2006-03-06 21:00:09 +0100 | [diff] [blame] | 124 | extern void unlink_named_object( struct object *obj ); |
Alexandre Julliard | b00fb17 | 2006-03-22 20:32:04 +0100 | [diff] [blame] | 125 | extern void make_object_static( struct object *obj ); |
Vitaliy Margolen | 1ca6e89 | 2005-11-01 10:22:38 +0000 | [diff] [blame] | 126 | extern struct namespace *create_namespace( unsigned int hash_size ); |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 127 | /* grab/release_object can take any pointer, but you better make sure */ |
| 128 | /* that the thing pointed to starts with a struct object... */ |
| 129 | extern struct object *grab_object( void *obj ); |
| 130 | extern void release_object( void *obj ); |
Alexandre Julliard | ead9b06 | 2005-11-18 16:31:18 +0000 | [diff] [blame] | 131 | extern struct object *find_object( const struct namespace *namespace, const struct unicode_str *name, |
Vitaliy Margolen | 3585f2f | 2005-10-29 12:38:23 +0000 | [diff] [blame] | 132 | unsigned int attributes ); |
Alexandre Julliard | a5e38b3 | 2007-12-05 16:57:41 +0100 | [diff] [blame] | 133 | extern struct object *find_object_index( const struct namespace *namespace, unsigned int index ); |
Alexandre Julliard | 8382eb0 | 2007-12-05 18:16:42 +0100 | [diff] [blame] | 134 | extern struct object_type *no_get_type( struct object *obj ); |
Alexandre Julliard | a8b8d9c | 1999-01-01 16:59:27 +0000 | [diff] [blame] | 135 | extern int no_add_queue( struct object *obj, struct wait_queue_entry *entry ); |
Alexandre Julliard | aa0ebd0 | 1998-12-30 12:06:45 +0000 | [diff] [blame] | 136 | extern int no_satisfied( struct object *obj, struct thread *thread ); |
Mike McCormack | f92fff6 | 2005-04-24 17:35:52 +0000 | [diff] [blame] | 137 | extern int no_signal( struct object *obj, unsigned int access ); |
Alexandre Julliard | 863637b | 2003-01-30 00:26:44 +0000 | [diff] [blame] | 138 | extern struct fd *no_get_fd( struct object *obj ); |
Alexandre Julliard | 28beba3 | 2005-12-12 14:57:40 +0100 | [diff] [blame] | 139 | extern unsigned int no_map_access( struct object *obj, unsigned int access ); |
Rob Shearman | c1707d8 | 2007-10-03 13:10:37 +0100 | [diff] [blame] | 140 | extern struct security_descriptor *default_get_sd( struct object *obj ); |
| 141 | extern int default_set_sd( struct object *obj, const struct security_descriptor *sd, unsigned int set_info ); |
Vitaliy Margolen | baffcb9 | 2005-11-22 14:55:42 +0000 | [diff] [blame] | 142 | extern struct object *no_lookup_name( struct object *obj, struct unicode_str *name, unsigned int attributes ); |
Alexandre Julliard | 7e71c1d | 2007-03-22 11:44:29 +0100 | [diff] [blame] | 143 | extern struct object *no_open_file( struct object *obj, unsigned int access, unsigned int sharing, |
| 144 | unsigned int options ); |
Alexandre Julliard | b9b1ea9 | 2005-06-09 15:39:52 +0000 | [diff] [blame] | 145 | extern int no_close_handle( struct object *obj, struct process *process, obj_handle_t handle ); |
Alexandre Julliard | 5bc7808 | 1999-06-22 17:26:53 +0000 | [diff] [blame] | 146 | extern void no_destroy( struct object *obj ); |
Alexandre Julliard | 1bdd154 | 1999-06-04 19:47:04 +0000 | [diff] [blame] | 147 | #ifdef DEBUG_OBJECTS |
| 148 | extern void dump_objects(void); |
Alexandre Julliard | b00fb17 | 2006-03-22 20:32:04 +0100 | [diff] [blame] | 149 | extern void close_objects(void); |
Alexandre Julliard | 1bdd154 | 1999-06-04 19:47:04 +0000 | [diff] [blame] | 150 | #endif |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 151 | |
Alexandre Julliard | d6d994f | 1999-09-28 16:40:07 +0000 | [diff] [blame] | 152 | /* event functions */ |
| 153 | |
| 154 | struct event; |
| 155 | |
Vitaliy Margolen | f676bc8 | 2005-12-02 15:55:48 +0100 | [diff] [blame] | 156 | extern struct event *create_event( struct directory *root, const struct unicode_str *name, |
Rob Shearman | dd9e392 | 2007-10-24 16:04:42 +0100 | [diff] [blame] | 157 | unsigned int attr, int manual_reset, int initial_state, |
| 158 | const struct security_descriptor *sd ); |
Alexandre Julliard | 5188574 | 2002-05-30 20:12:58 +0000 | [diff] [blame] | 159 | extern struct event *get_event_obj( struct process *process, obj_handle_t handle, unsigned int access ); |
Alexandre Julliard | d6d994f | 1999-09-28 16:40:07 +0000 | [diff] [blame] | 160 | extern void pulse_event( struct event *event ); |
| 161 | extern void set_event( struct event *event ); |
| 162 | extern void reset_event( struct event *event ); |
| 163 | |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 164 | /* mutex functions */ |
| 165 | |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 166 | extern void abandon_mutexes( struct thread *thread ); |
| 167 | |
Mike McCormack | 1eac191 | 2000-11-13 19:27:21 +0000 | [diff] [blame] | 168 | /* serial functions */ |
| 169 | |
Michael McCormack | 1c32a46 | 2001-03-22 20:09:34 +0000 | [diff] [blame] | 170 | int get_serial_async_timeout(struct object *obj, int type, int count); |
Mike McCormack | 1eac191 | 2000-11-13 19:27:21 +0000 | [diff] [blame] | 171 | |
Martin Wilck | 15a0f0e | 2002-07-03 21:04:09 +0000 | [diff] [blame] | 172 | /* socket functions */ |
| 173 | |
| 174 | extern void sock_init(void); |
| 175 | |
Alexandre Julliard | e712e07 | 1999-05-23 19:53:30 +0000 | [diff] [blame] | 176 | /* debugger functions */ |
| 177 | |
Alexandre Julliard | ea0d028 | 2000-03-10 22:16:10 +0000 | [diff] [blame] | 178 | extern int set_process_debugger( struct process *process, struct thread *debugger ); |
Alexandre Julliard | c6c335d | 2008-12-30 22:56:15 +0100 | [diff] [blame] | 179 | extern void generate_debug_event( struct thread *thread, int code, const void *arg ); |
| 180 | extern void generate_startup_debug_events( struct process *process, client_ptr_t entry ); |
Alexandre Julliard | ff81d78 | 2000-03-08 12:01:30 +0000 | [diff] [blame] | 181 | extern void debug_exit_thread( struct thread *thread ); |
Alexandre Julliard | e712e07 | 1999-05-23 19:53:30 +0000 | [diff] [blame] | 182 | |
Alexandre Julliard | d7e85d6 | 1999-11-23 19:39:11 +0000 | [diff] [blame] | 183 | /* registry functions */ |
| 184 | |
Alexandre Julliard | ac69fcb | 2010-05-04 18:23:29 +0200 | [diff] [blame] | 185 | extern unsigned int get_prefix_cpu_mask(void); |
Alexandre Julliard | 6c8d917 | 2000-08-26 04:40:07 +0000 | [diff] [blame] | 186 | extern void init_registry(void); |
Alexandre Julliard | 88e4261 | 2002-06-20 23:18:56 +0000 | [diff] [blame] | 187 | extern void flush_registry(void); |
Alexandre Julliard | d7e85d6 | 1999-11-23 19:39:11 +0000 | [diff] [blame] | 188 | |
Alexandre Julliard | 9037f4b | 2003-03-26 01:32:18 +0000 | [diff] [blame] | 189 | /* signal functions */ |
| 190 | |
Alexandre Julliard | 9d99a04 | 2005-08-19 14:01:43 +0000 | [diff] [blame] | 191 | extern void start_watchdog(void); |
| 192 | extern void stop_watchdog(void); |
| 193 | extern int watchdog_triggered(void); |
Alexandre Julliard | 9037f4b | 2003-03-26 01:32:18 +0000 | [diff] [blame] | 194 | extern void init_signals(void); |
Alexandre Julliard | 9037f4b | 2003-03-26 01:32:18 +0000 | [diff] [blame] | 195 | |
Alexandre Julliard | b849d79 | 2000-02-13 13:56:13 +0000 | [diff] [blame] | 196 | /* atom functions */ |
| 197 | |
Alexandre Julliard | 25e070c | 2008-06-25 14:03:08 +0200 | [diff] [blame] | 198 | extern atom_t add_global_atom( struct winstation *winstation, const struct unicode_str *str ); |
| 199 | extern atom_t find_global_atom( struct winstation *winstation, const struct unicode_str *str ); |
Alexandre Julliard | c3ac57d | 2005-07-08 14:23:27 +0000 | [diff] [blame] | 200 | extern int grab_global_atom( struct winstation *winstation, atom_t atom ); |
| 201 | extern void release_global_atom( struct winstation *winstation, atom_t atom ); |
Alexandre Julliard | b849d79 | 2000-02-13 13:56:13 +0000 | [diff] [blame] | 202 | |
Vitaliy Margolen | 3c6bdcc | 2005-11-29 17:21:05 +0100 | [diff] [blame] | 203 | /* directory functions */ |
| 204 | |
| 205 | extern struct directory *get_directory_obj( struct process *process, obj_handle_t handle, unsigned int access ); |
| 206 | extern struct object *find_object_dir( struct directory *root, const struct unicode_str *name, |
| 207 | unsigned int attr, struct unicode_str *name_left ); |
| 208 | extern void *create_named_object_dir( struct directory *root, const struct unicode_str *name, |
| 209 | unsigned int attr, const struct object_ops *ops ); |
Alexandre Julliard | 3764da6 | 2005-12-05 12:52:05 +0100 | [diff] [blame] | 210 | extern void *open_object_dir( struct directory *root, const struct unicode_str *name, |
| 211 | unsigned int attr, const struct object_ops *ops ); |
Alexandre Julliard | 8382eb0 | 2007-12-05 18:16:42 +0100 | [diff] [blame] | 212 | extern struct object_type *get_object_type( const struct unicode_str *name ); |
Vitaliy Margolen | 3c6bdcc | 2005-11-29 17:21:05 +0100 | [diff] [blame] | 213 | extern void init_directories(void); |
Vitaliy Margolen | 3c6bdcc | 2005-11-29 17:21:05 +0100 | [diff] [blame] | 214 | |
Vitaliy Margolen | 80444df | 2005-11-30 19:22:57 +0100 | [diff] [blame] | 215 | /* symbolic link functions */ |
| 216 | |
| 217 | extern struct symlink *create_symlink( struct directory *root, const struct unicode_str *name, |
| 218 | unsigned int attr, const struct unicode_str *target ); |
| 219 | |
Vitaliy Margolen | babfa79 | 2005-12-05 13:09:35 +0100 | [diff] [blame] | 220 | /* devices */ |
Alexandre Julliard | b00fb17 | 2006-03-22 20:32:04 +0100 | [diff] [blame] | 221 | extern void create_named_pipe_device( struct directory *root, const struct unicode_str *name ); |
| 222 | extern void create_mailslot_device( struct directory *root, const struct unicode_str *name ); |
Vitaliy Margolen | 80444df | 2005-11-30 19:22:57 +0100 | [diff] [blame] | 223 | |
Andreas Mohr | c941eff | 2000-09-22 22:37:56 +0000 | [diff] [blame] | 224 | /* global variables */ |
Alexandre Julliard | 2fe5777 | 2000-01-25 01:40:27 +0000 | [diff] [blame] | 225 | |
Andreas Mohr | c941eff | 2000-09-22 22:37:56 +0000 | [diff] [blame] | 226 | /* command-line options */ |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 227 | extern int debug_level; |
Alexandre Julliard | 7ad5be9 | 2003-03-14 04:08:42 +0000 | [diff] [blame] | 228 | extern int foreground; |
Alexandre Julliard | aaf477f | 2007-04-17 20:08:59 +0200 | [diff] [blame] | 229 | extern timeout_t master_socket_timeout; |
Alexandre Julliard | 88e4261 | 2002-06-20 23:18:56 +0000 | [diff] [blame] | 230 | extern const char *server_argv0; |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 231 | |
Andreas Mohr | c941eff | 2000-09-22 22:37:56 +0000 | [diff] [blame] | 232 | /* server start time used for GetTickCount() */ |
Alexandre Julliard | aaf477f | 2007-04-17 20:08:59 +0200 | [diff] [blame] | 233 | extern timeout_t server_start_time; |
Andreas Mohr | c941eff | 2000-09-22 22:37:56 +0000 | [diff] [blame] | 234 | |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 235 | #endif /* __WINE_SERVER_OBJECT_H */ |