diff --git a/server/atom.c b/server/atom.c
index a8d26af..e42a503 100644
--- a/server/atom.c
+++ b/server/atom.c
@@ -445,7 +445,7 @@
 
     if (table)
     {
-        reply->table = alloc_handle( current->process, table, 0, FALSE);
+        reply->table = alloc_handle( current->process, table, 0, 0 );
         release_object( table );
     }
 }
diff --git a/server/console.c b/server/console.c
index e096079..56d359c 100644
--- a/server/console.c
+++ b/server/console.c
@@ -1240,10 +1240,9 @@
     }
     if ((console = (struct console_input*)create_console_input( current )))
     {
-        if ((in = alloc_handle( renderer, console, req->access, req->attributes & OBJ_INHERIT )))
+        if ((in = alloc_handle( renderer, console, req->access, req->attributes )))
         {
-            if ((evt = alloc_handle( renderer, console->evt,
-                                     SYNCHRONIZE|GENERIC_READ|GENERIC_WRITE, FALSE )))
+            if ((evt = alloc_handle( renderer, console->evt, SYNCHRONIZE|GENERIC_READ|GENERIC_WRITE, 0 )))
             {
                 if (process != renderer)
                 {
@@ -1312,7 +1311,7 @@
     /* FIXME: req->share is not used (as in screen buffer creation)  */
     if (obj)
     {
-        reply->handle = alloc_handle( current->process, obj, req->access, req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, obj, req->access, req->attributes );
         release_object( obj );
     }
     else if (!get_error()) set_error( STATUS_ACCESS_DENIED );
@@ -1410,8 +1409,7 @@
     {
         /* FIXME: should store sharing and test it when opening the CONOUT$ device
          * see file.c on how this could be done */
-        reply->handle_out = alloc_handle( current->process, screen_buffer,
-                                          req->access, req->attributes & OBJ_INHERIT );
+        reply->handle_out = alloc_handle( current->process, screen_buffer, req->access, req->attributes );
         release_object( screen_buffer );
     }
     release_object( console );
@@ -1541,8 +1539,7 @@
 
     if (console)
     {
-        reply->handle = alloc_handle( current->process, console->event, 
-                                      EVENT_ALL_ACCESS, FALSE);
+        reply->handle = alloc_handle( current->process, console->event, EVENT_ALL_ACCESS, 0 );
         release_object( console );
     }
     else set_error( STATUS_INVALID_PARAMETER );
diff --git a/server/debugger.c b/server/debugger.c
index a7f8830..f40f494 100644
--- a/server/debugger.c
+++ b/server/debugger.c
@@ -116,7 +116,7 @@
     obj_handle_t handle;
 
     /* documented: THREAD_GET_CONTEXT | THREAD_SET_CONTEXT | THREAD_SUSPEND_RESUME */
-    if (!(handle = alloc_handle( debugger, thread, THREAD_ALL_ACCESS, FALSE ))) return 0;
+    if (!(handle = alloc_handle( debugger, thread, THREAD_ALL_ACCESS, 0 ))) return 0;
     event->data.info.create_thread.handle = handle;
     event->data.info.create_thread.teb    = thread->teb;
     event->data.info.create_thread.start  = arg;
@@ -131,11 +131,11 @@
     obj_handle_t handle;
 
     /* documented: PROCESS_VM_READ | PROCESS_VM_WRITE */
-    if (!(handle = alloc_handle( debugger, process, PROCESS_ALL_ACCESS, FALSE ))) return 0;
+    if (!(handle = alloc_handle( debugger, process, PROCESS_ALL_ACCESS, 0 ))) return 0;
     event->data.info.create_process.process = handle;
 
     /* documented: THREAD_GET_CONTEXT | THREAD_SET_CONTEXT | THREAD_SUSPEND_RESUME */
-    if (!(handle = alloc_handle( debugger, thread, THREAD_ALL_ACCESS, FALSE )))
+    if (!(handle = alloc_handle( debugger, thread, THREAD_ALL_ACCESS, 0 )))
     {
         close_handle( debugger, event->data.info.create_process.process, NULL );
         return 0;
@@ -145,7 +145,7 @@
     handle = 0;
     if (process->exe.file &&
         /* the doc says write access too, but this doesn't seem a good idea */
-        !(handle = alloc_handle( debugger, process->exe.file, GENERIC_READ, FALSE )))
+        !(handle = alloc_handle( debugger, process->exe.file, GENERIC_READ, 0 )))
     {
         close_handle( debugger, event->data.info.create_process.process, NULL );
         close_handle( debugger, event->data.info.create_process.thread, NULL );
@@ -182,7 +182,7 @@
     struct process_dll *dll = arg;
     obj_handle_t handle = 0;
 
-    if (dll->file && !(handle = alloc_handle( debugger, dll->file, GENERIC_READ, FALSE )))
+    if (dll->file && !(handle = alloc_handle( debugger, dll->file, GENERIC_READ, 0 )))
         return 0;
     event->data.info.load_dll.handle     = handle;
     event->data.info.load_dll.base       = dll->base;
@@ -582,7 +582,7 @@
         reply->pid  = 0;
         reply->tid  = 0;
         if (req->get_handle)
-            reply->wait = alloc_handle( current->process, debug_ctx, SYNCHRONIZE, FALSE );
+            reply->wait = alloc_handle( current->process, debug_ctx, SYNCHRONIZE, 0 );
     }
 }
 
@@ -651,7 +651,7 @@
         data.first  = req->first;
         if ((event = alloc_debug_event( current, EXCEPTION_DEBUG_EVENT, &data, context )))
         {
-            if ((reply->handle = alloc_handle( current->process, event, SYNCHRONIZE, FALSE )))
+            if ((reply->handle = alloc_handle( current->process, event, SYNCHRONIZE, 0 )))
             {
                 link_event( event );
                 suspend_process( current->process );
diff --git a/server/directory.c b/server/directory.c
index 21dec3a..6f14833 100644
--- a/server/directory.c
+++ b/server/directory.c
@@ -368,8 +368,7 @@
 
     if ((dir = create_directory( root, &name, req->attributes, HASH_SIZE )))
     {
-        reply->handle = alloc_handle( current->process, dir, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, dir, req->access, req->attributes );
         release_object( dir );
     }
 
@@ -388,8 +387,7 @@
 
     if ((dir = open_object_dir( root, &name, req->attributes, &directory_ops )))
     {
-        reply->handle = alloc_handle( current->process, &dir->obj, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, &dir->obj, req->access, req->attributes );
         release_object( dir );
     }
 
diff --git a/server/event.c b/server/event.c
index 7464e18..adbbb11 100644
--- a/server/event.c
+++ b/server/event.c
@@ -159,8 +159,7 @@
 
     if ((event = create_event( root, &name, req->attributes, req->manual_reset, req->initial_state )))
     {
-        reply->handle = alloc_handle( current->process, event, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, event, req->access, req->attributes );
         release_object( event );
     }
 
@@ -180,8 +179,7 @@
 
     if ((event = open_object_dir( root, &name, req->attributes, &event_ops )))
     {
-        reply->handle = alloc_handle( current->process, &event->obj, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, &event->obj, req->access, req->attributes );
         release_object( event );
     }
 
diff --git a/server/file.c b/server/file.c
index 1b34c7a..b24751a 100644
--- a/server/file.c
+++ b/server/file.c
@@ -356,8 +356,7 @@
     if ((file = create_file( get_req_data(), get_req_data_size(), req->access,
                              req->sharing, req->create, req->options, req->attrs )))
     {
-        reply->handle = alloc_handle( current->process, file, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, file, req->access, req->attributes );
         release_object( file );
     }
 }
@@ -376,8 +375,7 @@
     }
     if ((file = create_file_for_fd( fd, req->access, FILE_SHARE_READ | FILE_SHARE_WRITE )))
     {
-        reply->handle = alloc_handle( current->process, file, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, file, req->access, req->attributes );
         release_object( file );
     }
 }
diff --git a/server/handle.c b/server/handle.c
index 9ba56b6..9305191 100644
--- a/server/handle.c
+++ b/server/handle.c
@@ -223,10 +223,10 @@
 
 /* allocate a handle for an object, incrementing its refcount */
 /* return the handle, or 0 on error */
-obj_handle_t alloc_handle( struct process *process, void *obj, unsigned int access, int inherit )
+obj_handle_t alloc_handle( struct process *process, void *obj, unsigned int access, unsigned int attr )
 {
     access &= ~RESERVED_ALL;
-    if (inherit) access |= RESERVED_INHERIT;
+    if (attr & OBJ_INHERIT) access |= RESERVED_INHERIT;
     if (!process->handles)
     {
         set_error( STATUS_NO_MEMORY );
@@ -497,7 +497,7 @@
 
 /* duplicate a handle */
 obj_handle_t duplicate_handle( struct process *src, obj_handle_t src_handle, struct process *dst,
-                           unsigned int access, int inherit, int options )
+                               unsigned int access, unsigned int attr, unsigned int options )
 {
     obj_handle_t res;
     struct object *obj = get_handle_obj( src, src_handle, 0, NULL );
@@ -518,7 +518,7 @@
     if (options & DUP_HANDLE_MAKE_GLOBAL)
         res = alloc_global_handle( obj, access );
     else
-        res = alloc_handle( dst, obj, access, inherit );
+        res = alloc_handle( dst, obj, access, attr );
     release_object( obj );
     return res;
 }
@@ -534,7 +534,7 @@
         if (ops && obj->ops != ops)
             set_error( STATUS_OBJECT_TYPE_MISMATCH );
         else
-            handle = alloc_handle( current->process, obj, access, attr & OBJ_INHERIT );
+            handle = alloc_handle( current->process, obj, access, attr );
         release_object( obj );
     }
     else
@@ -573,12 +573,12 @@
         if (req->options & DUP_HANDLE_MAKE_GLOBAL)
         {
             reply->handle = duplicate_handle( src, req->src_handle, NULL,
-                                              req->access, req->attributes & OBJ_INHERIT, req->options );
+                                              req->access, req->attributes, req->options );
         }
         else if ((dst = get_process_from_handle( req->dst_process, PROCESS_DUP_HANDLE )))
         {
             reply->handle = duplicate_handle( src, req->src_handle, dst,
-                                              req->access, req->attributes & OBJ_INHERIT, req->options );
+                                              req->access, req->attributes, req->options );
             release_object( dst );
         }
         /* close the handle no matter what happened */
diff --git a/server/handle.h b/server/handle.h
index 74dd7dd..ad71252 100644
--- a/server/handle.h
+++ b/server/handle.h
@@ -35,7 +35,7 @@
 /* alloc_handle takes a void *obj for convenience, but you better make sure */
 /* that the thing pointed to starts with a struct object... */
 extern obj_handle_t alloc_handle( struct process *process, void *obj,
-                              unsigned int access, int inherit );
+                                  unsigned int access, unsigned int attr );
 extern int close_handle( struct process *process, obj_handle_t handle, int *fd );
 extern struct object *get_handle_obj( struct process *process, obj_handle_t handle,
                                       unsigned int access, const struct object_ops *ops );
@@ -43,7 +43,7 @@
 extern int get_handle_unix_fd( struct process *process, obj_handle_t handle, unsigned int access );
 extern int set_handle_unix_fd( struct process *process, obj_handle_t handle, int fd );
 extern obj_handle_t duplicate_handle( struct process *src, obj_handle_t src_handle, struct process *dst,
-                                  unsigned int access, int inherit, int options );
+                                      unsigned int access, unsigned int attr, unsigned int options );
 extern obj_handle_t open_object( const struct namespace *namespace, const struct unicode_str *name,
                                  const struct object_ops *ops, unsigned int access, unsigned int attr );
 extern obj_handle_t find_inherited_handle( struct process *process, const struct object_ops *ops );
diff --git a/server/mailslot.c b/server/mailslot.c
index c882896..f4accf2 100644
--- a/server/mailslot.c
+++ b/server/mailslot.c
@@ -429,8 +429,7 @@
     if ((mailslot = create_mailslot( root, &name, req->attributes, req->max_msgsize,
                                      req->read_timeout )))
     {
-        reply->handle = alloc_handle( current->process, mailslot,
-                                      req->access, req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, mailslot, req->access, req->attributes );
         release_object( mailslot );
     }
 
@@ -466,8 +465,7 @@
         writer = create_mail_writer( mailslot, req->access, req->sharing );
         if (writer)
         {
-            reply->handle = alloc_handle( current->process, writer,
-                                          req->access, req->attributes & OBJ_INHERIT );
+            reply->handle = alloc_handle( current->process, writer, req->access, req->attributes );
             release_object( writer );
         }
         release_object( mailslot );
diff --git a/server/mapping.c b/server/mapping.c
index cc81e37..c9813f2 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -389,8 +389,7 @@
 
     if ((obj = create_mapping( root, &name, req->attributes, size, req->protect, req->file_handle )))
     {
-        reply->handle = alloc_handle( current->process, obj, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, obj, req->access, req->attributes );
         release_object( obj );
     }
 
@@ -410,8 +409,7 @@
 
     if ((mapping = open_object_dir( root, &name, req->attributes, &mapping_ops )))
     {
-        reply->handle = alloc_handle( current->process, &mapping->obj, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, &mapping->obj, req->access, req->attributes );
         release_object( mapping );
     }
 
diff --git a/server/mutex.c b/server/mutex.c
index 18c194e..f602200 100644
--- a/server/mutex.c
+++ b/server/mutex.c
@@ -185,8 +185,7 @@
 
     if ((mutex = create_mutex( root, &name, req->attributes, req->owned )))
     {
-        reply->handle = alloc_handle( current->process, mutex, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, mutex, req->access, req->attributes );
         release_object( mutex );
     }
 
@@ -206,8 +205,7 @@
 
     if ((mutex = open_object_dir( root, &name, req->attributes, &mutex_ops )))
     {
-        reply->handle = alloc_handle( current->process, &mutex->obj, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, &mutex->obj, req->access, req->attributes );
         release_object( mutex );
     }
 
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 2917d7b..bda6bd9 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -679,8 +679,7 @@
     server = create_pipe_server( pipe, req->options );
     if (server)
     {
-        reply->handle = alloc_handle( current->process, server,
-                                      req->access, req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, server, req->access, req->attributes );
         server->pipe->instances++;
         release_object( server );
     }
@@ -745,8 +744,7 @@
                 server->state = ps_connected_server;
                 server->client = client;
                 client->server = server;
-                reply->handle = alloc_handle( current->process, client,
-                                              req->access, req->attributes & OBJ_INHERIT );
+                reply->handle = alloc_handle( current->process, client, req->access, req->attributes );
             }
         }
         else
diff --git a/server/process.c b/server/process.c
index 401c1ec..3f7daf3 100644
--- a/server/process.c
+++ b/server/process.c
@@ -892,7 +892,7 @@
         goto done;
 
     if (!(info->data = memdup( get_req_data(), info->data_size ))) goto done;
-    reply->info = alloc_handle( current->process, info, SYNCHRONIZE, FALSE );
+    reply->info = alloc_handle( current->process, info, SYNCHRONIZE, 0 );
 
  done:
     release_object( info );
@@ -909,9 +909,9 @@
         reply->pid = get_process_id( info->process );
         reply->tid = get_thread_id( info->thread );
         reply->phandle = alloc_handle( current->process, info->process,
-                                       req->process_access, req->process_attr & OBJ_INHERIT );
+                                       req->process_access, req->process_attr );
         reply->thandle = alloc_handle( current->process, info->thread,
-                                       req->thread_access, req->thread_attr & OBJ_INHERIT );
+                                       req->thread_access, req->thread_attr );
         reply->success = is_process_init_done( info->process );
         release_object( info );
     }
@@ -943,11 +943,11 @@
     {
         struct process *parent_process = info->owner->process;
         reply->hstdin  = duplicate_handle( parent_process, info->hstdin, process,
-                                           0, TRUE, DUPLICATE_SAME_ACCESS );
+                                           0, OBJ_INHERIT, DUPLICATE_SAME_ACCESS );
         reply->hstdout = duplicate_handle( parent_process, info->hstdout, process,
-                                           0, TRUE, DUPLICATE_SAME_ACCESS );
+                                           0, OBJ_INHERIT, DUPLICATE_SAME_ACCESS );
         reply->hstderr = duplicate_handle( parent_process, info->hstderr, process,
-                                           0, TRUE, DUPLICATE_SAME_ACCESS );
+                                           0, OBJ_INHERIT, DUPLICATE_SAME_ACCESS );
         /* some handles above may have been invalid; this is not an error */
         if (get_error() == STATUS_INVALID_HANDLE ||
             get_error() == STATUS_OBJECT_TYPE_MISMATCH) clear_error();
@@ -1009,8 +1009,7 @@
     reply->handle = 0;
     if (process)
     {
-        reply->handle = alloc_handle( current->process, process, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, process, req->access, req->attributes );
         release_object( process );
     }
 }
diff --git a/server/semaphore.c b/server/semaphore.c
index 2dd6beb..d64bfbe 100644
--- a/server/semaphore.c
+++ b/server/semaphore.c
@@ -159,8 +159,7 @@
 
     if ((sem = create_semaphore( root, &name, req->attributes, req->initial, req->max )))
     {
-        reply->handle = alloc_handle( current->process, sem, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, sem, req->access, req->attributes );
         release_object( sem );
     }
 
@@ -180,8 +179,7 @@
 
     if ((sem = open_object_dir( root, &name, req->attributes, &semaphore_ops )))
     {
-        reply->handle = alloc_handle( current->process, &sem->obj, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, &sem->obj, req->access, req->attributes );
         release_object( sem );
     }
 
diff --git a/server/snapshot.c b/server/snapshot.c
index 4159962..1d2ec97 100644
--- a/server/snapshot.c
+++ b/server/snapshot.c
@@ -236,7 +236,7 @@
     reply->handle = 0;
     if ((snapshot = create_snapshot( req->pid, req->flags )))
     {
-        reply->handle = alloc_handle( current->process, snapshot, 0, req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, snapshot, 0, req->attributes );
         release_object( snapshot );
     }
 }
diff --git a/server/sock.c b/server/sock.c
index 6e2acbb..2cbd100 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -773,8 +773,7 @@
     reply->handle = 0;
     if ((obj = create_socket( req->family, req->type, req->protocol, req->flags )) != NULL)
     {
-        reply->handle = alloc_handle( current->process, obj, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, obj, req->access, req->attributes );
         release_object( obj );
     }
 }
@@ -787,8 +786,7 @@
     reply->handle = 0;
     if ((sock = accept_socket( req->lhandle )) != NULL)
     {
-        reply->handle = alloc_handle( current->process, &sock->obj, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, &sock->obj, req->access, req->attributes );
         sock->wparam = reply->handle;  /* wparam for message is the socket handle */
         sock_reselect( sock );
         release_object( &sock->obj );
diff --git a/server/symlink.c b/server/symlink.c
index cf805a7..083da71 100644
--- a/server/symlink.c
+++ b/server/symlink.c
@@ -155,8 +155,7 @@
 
     if ((symlink = create_symlink( root, &name, req->attributes, &target )))
     {
-        reply->handle = alloc_handle( current->process, symlink, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, symlink, req->access, req->attributes );
         release_object( symlink );
     }
 
@@ -176,8 +175,7 @@
 
     if ((symlink = open_object_dir( root, &name, req->attributes | OBJ_OPENLINK, &symlink_ops )))
     {
-        reply->handle = alloc_handle( current->process, &symlink->obj, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, &symlink->obj, req->access, req->attributes );
         release_object( symlink );
     }
 
diff --git a/server/thread.c b/server/thread.c
index 51ef5ec..705dc7b 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -828,8 +828,7 @@
     {
         if (req->suspend) thread->suspend++;
         reply->tid = get_thread_id( thread );
-        if ((reply->handle = alloc_handle( current->process, thread,
-                                           req->access, req->attributes & OBJ_INHERIT )))
+        if ((reply->handle = alloc_handle( current->process, thread, req->access, req->attributes )))
         {
             /* thread object will be released when the thread gets killed */
             return;
@@ -931,8 +930,7 @@
     reply->handle = 0;
     if (thread)
     {
-        reply->handle = alloc_handle( current->process, thread, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, thread, req->access, req->attributes );
         release_object( thread );
     }
 }
diff --git a/server/timer.c b/server/timer.c
index 436ed7c..395bbda 100644
--- a/server/timer.c
+++ b/server/timer.c
@@ -218,8 +218,7 @@
 
     if ((timer = create_timer( root, &name, req->attributes, req->manual )))
     {
-        reply->handle = alloc_handle( current->process, timer, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, timer, req->access, req->attributes );
         release_object( timer );
     }
 
@@ -239,8 +238,7 @@
 
     if ((timer = open_object_dir( root, &name, req->attributes, &timer_ops )))
     {
-        reply->handle = alloc_handle( current->process, &timer->obj, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, &timer->obj, req->access, req->attributes );
         release_object( timer );
     }
 
diff --git a/server/token.c b/server/token.c
index d10b9a1..3af7236 100644
--- a/server/token.c
+++ b/server/token.c
@@ -884,7 +884,7 @@
         {
             if (thread->token)
                 reply->token = alloc_handle( current->process, thread->token, req->access,
-                                             req->attributes & OBJ_INHERIT );
+                                             req->attributes );
             else
                 set_error(STATUS_NO_TOKEN);
             release_object( thread );
@@ -897,7 +897,7 @@
         {
             if (process->token)
                 reply->token = alloc_handle( current->process, process->token, req->access,
-                                             req->attributes & OBJ_INHERIT );
+                                             req->attributes );
             else
                 set_error(STATUS_NO_TOKEN);
             release_object( process );
@@ -1017,8 +1017,7 @@
 
             access = req->access;
             if (access & MAXIMUM_ALLOWED) access = TOKEN_ALL_ACCESS; /* FIXME: needs general solution */
-            reply->new_handle = alloc_handle( current->process, token, access,
-                                              req->attributes & OBJ_INHERIT);
+            reply->new_handle = alloc_handle( current->process, token, access, req->attributes);
             release_object( token );
         }
         release_object( src_token );
diff --git a/server/winstation.c b/server/winstation.c
index 0f7b85d..efacdf3 100644
--- a/server/winstation.c
+++ b/server/winstation.c
@@ -268,7 +268,7 @@
     }
     if (winstation)
     {
-        process->winstation = alloc_handle( process, winstation, WINSTA_ALL_ACCESS, FALSE );
+        process->winstation = alloc_handle( process, winstation, WINSTA_ALL_ACCESS, 0 );
         release_object( winstation );
     }
     clear_error();  /* ignore errors */
@@ -290,7 +290,7 @@
         if (!name) name = &default_str;
         if ((desktop = create_desktop( name, OBJ_CASE_INSENSITIVE | OBJ_OPENIF, 0, winstation )))
         {
-            process->desktop = alloc_handle( process, desktop, DESKTOP_ALL_ACCESS, FALSE );
+            process->desktop = alloc_handle( process, desktop, DESKTOP_ALL_ACCESS, 0 );
             release_object( desktop );
         }
         release_object( winstation );
@@ -319,8 +319,7 @@
     get_req_unicode_str( &name );
     if ((winstation = create_winstation( &name, req->attributes, req->flags )))
     {
-        reply->handle = alloc_handle( current->process, winstation, req->access,
-                                      req->attributes & OBJ_INHERIT );
+        reply->handle = alloc_handle( current->process, winstation, req->access, req->attributes );
         release_object( winstation );
     }
 }
@@ -387,8 +386,7 @@
     {
         if ((desktop = create_desktop( &name, req->attributes, req->flags, winstation )))
         {
-            reply->handle = alloc_handle( current->process, desktop, req->access,
-                                          req->attributes & OBJ_INHERIT );
+            reply->handle = alloc_handle( current->process, desktop, req->access, req->attributes );
             release_object( desktop );
         }
         release_object( winstation );
