Beginnings of support for window stations and desktops.

diff --git a/server/protocol.def b/server/protocol.def
index b828174..108e57b 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -2023,6 +2023,101 @@
 @END
 
 
+/* Create a window station */
+@REQ(create_winstation)
+    unsigned int flags;           /* window station flags */
+    unsigned int access;          /* wanted access rights */
+    int          inherit;         /* inherit flag */
+    VARARG(name,unicode_str);     /* object name */
+@REPLY
+    obj_handle_t handle;          /* handle to the window station */
+@END
+
+
+/* Open a handle to a window station */
+@REQ(open_winstation)
+    unsigned int access;          /* wanted access rights */
+    int          inherit;         /* inherit flag */
+    VARARG(name,unicode_str);     /* object name */
+@REPLY
+    obj_handle_t handle;          /* handle to the window station */
+@END
+
+
+/* Close a window station */
+@REQ(close_winstation)
+    obj_handle_t handle;          /* handle to the window station */
+@END
+
+
+/* Get the process current window station */
+@REQ(get_process_winstation)
+@REPLY
+    obj_handle_t handle;          /* handle to the window station */
+@END
+
+
+/* Set the process current window station */
+@REQ(set_process_winstation)
+    obj_handle_t handle;          /* handle to the window station */
+@END
+
+
+/* Create a desktop */
+@REQ(create_desktop)
+    unsigned int flags;           /* desktop flags */
+    unsigned int access;          /* wanted access rights */
+    int          inherit;         /* inherit flag */
+    VARARG(name,unicode_str);     /* object name */
+@REPLY
+    obj_handle_t handle;          /* handle to the desktop */
+@END
+
+
+/* Open a handle to a desktop */
+@REQ(open_desktop)
+    unsigned int flags;           /* desktop flags */
+    unsigned int access;          /* wanted access rights */
+    int          inherit;         /* inherit flag */
+    VARARG(name,unicode_str);     /* object name */
+@REPLY
+    obj_handle_t handle;          /* handle to the desktop */
+@END
+
+
+/* Close a desktop */
+@REQ(close_desktop)
+    obj_handle_t handle;          /* handle to the desktop */
+@END
+
+
+/* Get the thread current desktop */
+@REQ(get_thread_desktop)
+    thread_id_t  tid;             /* thread id */
+@REPLY
+    obj_handle_t handle;          /* handle to the desktop */
+@END
+
+
+/* Set the thread current desktop */
+@REQ(set_thread_desktop)
+    obj_handle_t handle;          /* handle to the desktop */
+@END
+
+
+/* Get/set information about a user object (window station or desktop) */
+@REQ(set_user_object_info)
+    obj_handle_t handle;          /* handle to the object */
+    unsigned int flags;           /* information to set */
+    unsigned int obj_flags;       /* new object flags */
+@REPLY
+    int          is_desktop;      /* is object a desktop? */
+    unsigned int old_obj_flags;   /* old object flags */
+    VARARG(name,unicode_str);     /* object name */
+@END
+#define SET_USER_OBJECT_FLAGS 1
+
+
 /* Attach (or detach) thread inputs */
 @REQ(attach_thread_input)
     thread_id_t    tid_from;       /* thread to be attached */