Add name_lookup function in object_ops.

diff --git a/server/atom.c b/server/atom.c
index eda4a64..05af583 100644
--- a/server/atom.c
+++ b/server/atom.c
@@ -78,6 +78,7 @@
     NULL,                         /* satisfied */
     no_signal,                    /* signal */
     no_get_fd,                    /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     atom_table_destroy            /* destroy */
 };
diff --git a/server/change.c b/server/change.c
index a5819c5..8bd9e83 100644
--- a/server/change.c
+++ b/server/change.c
@@ -73,6 +73,7 @@
     no_satisfied,             /* satisfied */
     no_signal,                /* signal */
     no_get_fd,                /* get_fd */
+    no_lookup_name,           /* lookup_name */
     no_close_handle,          /* close_handle */
     change_destroy            /* destroy */
 };
diff --git a/server/clipboard.c b/server/clipboard.c
index efa5b7b..26570db 100644
--- a/server/clipboard.c
+++ b/server/clipboard.c
@@ -55,6 +55,7 @@
     NULL,                         /* satisfied */
     no_signal,                    /* signal */
     no_get_fd,                    /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     no_destroy                    /* destroy */
 };
diff --git a/server/console.c b/server/console.c
index bbadc1b..8c556da 100644
--- a/server/console.c
+++ b/server/console.c
@@ -48,6 +48,7 @@
     no_satisfied,                     /* satisfied */
     no_signal,                        /* signal */
     no_get_fd,                        /* get_fd */
+    no_lookup_name,                   /* lookup_name */
     no_close_handle,                  /* close_handle */
     console_input_destroy             /* destroy */
 };
@@ -74,6 +75,7 @@
     no_satisfied,                     /* satisfied */
     no_signal,                        /* signal */
     no_get_fd,                        /* get_fd */
+    no_lookup_name,                   /* lookup_name */
     no_close_handle,                  /* close_handle */
     console_input_events_destroy      /* destroy */
 };
@@ -111,6 +113,7 @@
     NULL,                             /* satisfied */
     no_signal,                        /* signal */
     no_get_fd,                        /* get_fd */
+    no_lookup_name,                   /* lookup_name */
     no_close_handle,                  /* close_handle */
     screen_buffer_destroy             /* destroy */
 };
diff --git a/server/debugger.c b/server/debugger.c
index 8940c0b..893225e 100644
--- a/server/debugger.c
+++ b/server/debugger.c
@@ -73,6 +73,7 @@
     no_satisfied,                  /* satisfied */
     no_signal,                     /* signal */
     no_get_fd,                     /* get_fd */
+    no_lookup_name,                /* lookup_name */
     no_close_handle,               /* close_handle */
     debug_event_destroy            /* destroy */
 };
@@ -91,6 +92,7 @@
     no_satisfied,                  /* satisfied */
     no_signal,                     /* signal */
     no_get_fd,                     /* get_fd */
+    no_lookup_name,                /* lookup_name */
     no_close_handle,               /* close_handle */
     debug_ctx_destroy              /* destroy */
 };
diff --git a/server/event.c b/server/event.c
index 90c525c..fad1542 100644
--- a/server/event.c
+++ b/server/event.c
@@ -55,6 +55,7 @@
     event_satisfied,           /* satisfied */
     event_signal,              /* signal */
     no_get_fd,                 /* get_fd */
+    no_lookup_name,            /* lookup_name */
     no_close_handle,           /* close_handle */
     no_destroy                 /* destroy */
 };
diff --git a/server/fd.c b/server/fd.c
index c7569af..9dc2718 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -162,6 +162,7 @@
     NULL,                     /* satisfied */
     no_signal,                /* signal */
     no_get_fd,                /* get_fd */
+    no_lookup_name,           /* lookup_name */
     no_close_handle,          /* close_handle */
     fd_destroy                /* destroy */
 };
@@ -193,6 +194,7 @@
     NULL,                     /* satisfied */
     no_signal,                /* signal */
     no_get_fd,                /* get_fd */
+    no_lookup_name,           /* lookup_name */
     no_close_handle,          /* close_handle */
     device_destroy            /* destroy */
 };
@@ -223,6 +225,7 @@
     NULL,                     /* satisfied */
     no_signal,                /* signal */
     no_get_fd,                /* get_fd */
+    no_lookup_name,           /* lookup_name */
     no_close_handle,          /* close_handle */
     inode_destroy             /* destroy */
 };
@@ -255,6 +258,7 @@
     no_satisfied,               /* satisfied */
     no_signal,                  /* signal */
     no_get_fd,                  /* get_fd */
+    no_lookup_name,             /* lookup_name */
     no_close_handle,            /* close_handle */
     no_destroy                  /* destroy */
 };
diff --git a/server/file.c b/server/file.c
index a5e4d76..625caf1 100644
--- a/server/file.c
+++ b/server/file.c
@@ -77,6 +77,7 @@
     no_satisfied,                 /* satisfied */
     no_signal,                    /* signal */
     file_get_fd,                  /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     file_destroy                  /* destroy */
 };
diff --git a/server/handle.c b/server/handle.c
index 0a3a67b..b9312ce 100644
--- a/server/handle.c
+++ b/server/handle.c
@@ -108,6 +108,7 @@
     NULL,                            /* satisfied */
     no_signal,                       /* signal */
     no_get_fd,                       /* get_fd */
+    no_lookup_name,                  /* lookup_name */
     no_close_handle,                 /* close_handle */
     handle_table_destroy             /* destroy */
 };
diff --git a/server/hook.c b/server/hook.c
index eb40d14..d523961 100644
--- a/server/hook.c
+++ b/server/hook.c
@@ -80,6 +80,7 @@
     NULL,                         /* satisfied */
     no_signal,                    /* signal */
     no_get_fd,                    /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     hook_table_destroy            /* destroy */
 };
diff --git a/server/mailslot.c b/server/mailslot.c
index 38e0172..5e9f890 100644
--- a/server/mailslot.c
+++ b/server/mailslot.c
@@ -75,6 +75,7 @@
     no_satisfied,              /* satisfied */
     no_signal,                 /* signal */
     mailslot_get_fd,           /* get_fd */
+    no_lookup_name,            /* lookup_name */
     no_close_handle,           /* close_handle */
     mailslot_destroy           /* destroy */
 };
@@ -115,6 +116,7 @@
     NULL,                       /* satisfied */
     no_signal,                  /* signal */
     mail_writer_get_fd,         /* get_fd */
+    no_lookup_name,             /* lookup_name */
     no_close_handle,            /* close_handle */
     mail_writer_destroy         /* destroy */
 };
diff --git a/server/mapping.c b/server/mapping.c
index 2825ef6..62d98c1 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -63,6 +63,7 @@
     NULL,                        /* satisfied */
     no_signal,                   /* signal */
     mapping_get_fd,              /* get_fd */
+    no_lookup_name,              /* lookup_name */
     no_close_handle,             /* close_handle */
     mapping_destroy              /* destroy */
 };
diff --git a/server/mutex.c b/server/mutex.c
index 439af5e..52e6d8cbd 100644
--- a/server/mutex.c
+++ b/server/mutex.c
@@ -58,6 +58,7 @@
     mutex_satisfied,           /* satisfied */
     mutex_signal,              /* signal */
     no_get_fd,                 /* get_fd */
+    no_lookup_name,            /* lookup_name */
     no_close_handle,           /* close_handle */
     mutex_destroy              /* destroy */
 };
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 3664f2b..626c0e1 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -110,6 +110,7 @@
     NULL,                         /* satisfied */
     no_signal,                    /* signal */
     no_get_fd,                    /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     named_pipe_destroy            /* destroy */
 };
@@ -131,6 +132,7 @@
     no_satisfied,                 /* satisfied */
     no_signal,                    /* signal */
     pipe_server_get_fd,           /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     pipe_server_destroy           /* destroy */
 };
@@ -162,6 +164,7 @@
     no_satisfied,                 /* satisfied */
     no_signal,                    /* signal */
     pipe_client_get_fd,           /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     pipe_client_destroy           /* destroy */
 };
diff --git a/server/object.c b/server/object.c
index e21957f..3f8d0a1 100644
--- a/server/object.c
+++ b/server/object.c
@@ -297,6 +297,12 @@
     return NULL;
 }
 
+struct object *no_lookup_name( struct object *obj, struct unicode_str *name,
+                               unsigned int attr )
+{
+    return NULL;
+}
+
 int no_close_handle( struct object *obj, struct process *process, obj_handle_t handle )
 {
     return 1;  /* ok to close */
diff --git a/server/object.h b/server/object.h
index 3c9601f..f73d8a1 100644
--- a/server/object.h
+++ b/server/object.h
@@ -45,6 +45,13 @@
 struct async_queue;
 struct winstation;
 
+
+struct unicode_str
+{
+    const WCHAR *str;
+    size_t       len;
+};
+
 /* operations valid on all objects */
 struct object_ops
 {
@@ -64,6 +71,8 @@
     int  (*signal)(struct object *, unsigned int);
     /* return an fd object that can be used to read/write from the object */
     struct fd *(*get_fd)(struct object *);
+    /* lookup a name if an object has a namespace */
+    struct object *(*lookup_name)(struct object *, struct unicode_str *,unsigned int);
     /* close a handle to this object */
     int (*close_handle)(struct object *,struct process *,obj_handle_t);
     /* destroy on refcount == 0 */
@@ -88,12 +97,6 @@
     struct thread  *thread;
 };
 
-struct unicode_str
-{
-    const WCHAR *str;
-    size_t       len;
-};
-
 extern void *mem_alloc( size_t size );  /* malloc wrapper */
 extern void *memdup( const void *data, size_t len );
 extern void *alloc_object( const struct object_ops *ops );
@@ -112,6 +115,7 @@
 extern int no_satisfied( struct object *obj, struct thread *thread );
 extern int no_signal( struct object *obj, unsigned int access );
 extern struct fd *no_get_fd( struct object *obj );
+extern struct object *no_lookup_name( struct object *obj, struct unicode_str *name, unsigned int attributes );
 extern int no_close_handle( struct object *obj, struct process *process, obj_handle_t handle );
 extern void no_destroy( struct object *obj );
 #ifdef DEBUG_OBJECTS
diff --git a/server/process.c b/server/process.c
index 1ff46a4..a5db274 100644
--- a/server/process.c
+++ b/server/process.c
@@ -70,6 +70,7 @@
     no_satisfied,                /* satisfied */
     no_signal,                   /* signal */
     no_get_fd,                   /* get_fd */
+    no_lookup_name,              /* lookup_name */
     no_close_handle,             /* close_handle */
     process_destroy              /* destroy */
 };
@@ -118,6 +119,7 @@
     no_satisfied,                  /* satisfied */
     no_signal,                     /* signal */
     no_get_fd,                     /* get_fd */
+    no_lookup_name,                /* lookup_name */
     no_close_handle,               /* close_handle */
     startup_info_destroy           /* destroy */
 };
diff --git a/server/queue.c b/server/queue.c
index be80c85..8468ce6 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -150,6 +150,7 @@
     msg_queue_satisfied,       /* satisfied */
     no_signal,                 /* signal */
     no_get_fd,                 /* get_fd */
+    no_lookup_name,            /* lookup_name */
     no_close_handle,           /* close_handle */
     msg_queue_destroy          /* destroy */
 };
@@ -165,6 +166,7 @@
     NULL,                         /* satisfied */
     no_signal,                    /* signal */
     no_get_fd,                    /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     thread_input_destroy          /* destroy */
 };
diff --git a/server/registry.c b/server/registry.c
index eef7dc9..0a0ca23 100644
--- a/server/registry.c
+++ b/server/registry.c
@@ -145,6 +145,7 @@
     NULL,                    /* satisfied */
     no_signal,               /* signal */
     no_get_fd,               /* get_fd */
+    no_lookup_name,          /* lookup_name */
     key_close_handle,        /* close_handle */
     key_destroy              /* destroy */
 };
diff --git a/server/request.c b/server/request.c
index 71ee445..f7fb0b3 100644
--- a/server/request.c
+++ b/server/request.c
@@ -95,6 +95,7 @@
     NULL,                          /* satisfied */
     no_signal,                     /* signal */
     no_get_fd,                     /* get_fd */
+    no_lookup_name,                /* lookup_name */
     no_close_handle,               /* close_handle */
     master_socket_destroy          /* destroy */
 };
diff --git a/server/semaphore.c b/server/semaphore.c
index 650b5b1..589704a 100644
--- a/server/semaphore.c
+++ b/server/semaphore.c
@@ -55,6 +55,7 @@
     semaphore_satisfied,           /* satisfied */
     semaphore_signal,              /* signal */
     no_get_fd,                     /* get_fd */
+    no_lookup_name,                /* lookup_name */
     no_close_handle,               /* close_handle */
     no_destroy                     /* destroy */
 };
diff --git a/server/serial.c b/server/serial.c
index e2763dc..09ca6ec 100644
--- a/server/serial.c
+++ b/server/serial.c
@@ -100,6 +100,7 @@
     no_satisfied,                 /* satisfied */
     no_signal,                    /* signal */
     serial_get_fd,                /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     serial_destroy                /* destroy */
 };
diff --git a/server/signal.c b/server/signal.c
index 2888015..d90739f 100644
--- a/server/signal.c
+++ b/server/signal.c
@@ -64,6 +64,7 @@
     NULL,                     /* satisfied */
     no_signal,                /* signal */
     no_get_fd,                /* get_fd */
+    no_lookup_name,           /* lookup_name */
     no_close_handle,          /* close_handle */
     handler_destroy           /* destroy */
 };
diff --git a/server/snapshot.c b/server/snapshot.c
index 6c71b75..5401375 100644
--- a/server/snapshot.c
+++ b/server/snapshot.c
@@ -63,6 +63,7 @@
     NULL,                         /* satisfied */
     no_signal,                    /* signal */
     no_get_fd,                    /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     snapshot_destroy              /* destroy */
 };
diff --git a/server/sock.c b/server/sock.c
index 0a9b4225..601dd77 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -108,6 +108,7 @@
     no_satisfied,                 /* satisfied */
     no_signal,                    /* signal */
     sock_get_fd,                  /* get_fd */
+    no_lookup_name,               /* lookup_name */
     no_close_handle,              /* close_handle */
     sock_destroy                  /* destroy */
 };
diff --git a/server/thread.c b/server/thread.c
index 3339e9d..50d50c8 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -94,6 +94,7 @@
     no_satisfied,               /* satisfied */
     no_signal,                  /* signal */
     no_get_fd,                  /* get_fd */
+    no_lookup_name,             /* lookup_name */
     no_close_handle,            /* close_handle */
     destroy_thread              /* destroy */
 };
diff --git a/server/timer.c b/server/timer.c
index 5afc2ef..717d6d5 100644
--- a/server/timer.c
+++ b/server/timer.c
@@ -63,6 +63,7 @@
     timer_satisfied,           /* satisfied */
     no_signal,                 /* signal */
     no_get_fd,                 /* get_fd */
+    no_lookup_name,            /* lookup_name */
     no_close_handle,           /* close_handle */
     timer_destroy              /* destroy */
 };
diff --git a/server/token.c b/server/token.c
index e42e891..7cf5e06 100644
--- a/server/token.c
+++ b/server/token.c
@@ -114,6 +114,7 @@
     NULL,                      /* satisfied */
     no_signal,                 /* signal */
     no_get_fd,                 /* get_fd */
+    no_lookup_name,            /* lookup_name */
     no_close_handle,           /* close_handle */
     token_destroy              /* destroy */
 };
diff --git a/server/winstation.c b/server/winstation.c
index fd5e71b..8dbb8f2 100644
--- a/server/winstation.c
+++ b/server/winstation.c
@@ -58,6 +58,7 @@
     NULL,                         /* satisfied */
     no_signal,                    /* signal */
     no_get_fd,                    /* get_fd */
+    no_lookup_name,               /* lookup_name */
     winstation_close_handle,      /* close_handle */
     winstation_destroy            /* destroy */
 };
@@ -73,6 +74,7 @@
     NULL,                         /* satisfied */
     no_signal,                    /* signal */
     no_get_fd,                    /* get_fd */
+    no_lookup_name,               /* lookup_name */
     desktop_close_handle,         /* close_handle */
     desktop_destroy               /* destroy */
 };