Changed fd operations to take a struct fd instead of a struct object.
Removed get_file_info function from object operations.
Added get_device_id request to avoid abusing get_file_info.

diff --git a/server/file.h b/server/file.h
index f5c9a32..351c62e 100644
--- a/server/file.h
+++ b/server/file.h
@@ -29,28 +29,47 @@
 struct fd_ops
 {
     /* get the events we want to poll() for on this object */
-    int  (*get_poll_events)(struct object *);
+    int  (*get_poll_events)(struct fd *);
     /* a poll() event occured */
-    void (*poll_event)(struct object *,int event);
+    void (*poll_event)(struct fd *,int event);
     /* flush the object buffers */
-    int  (*flush)(struct object *);
+    int  (*flush)(struct fd *);
     /* get file information */
-    int  (*get_file_info)(struct object *,struct get_file_info_reply *, int *flags);
+    int  (*get_file_info)(struct fd *,struct get_file_info_reply *, int *flags);
     /* queue an async operation - see register_async handler in async.c*/
-    void (*queue_async)(struct object *, void* ptr, unsigned int status, int type, int count);
+    void (*queue_async)(struct fd *, void* ptr, unsigned int status, int type, int count);
 };
 
+/* file descriptor functions */
+
 extern void *alloc_fd_object( const struct object_ops *ops,
                               const struct fd_ops *fd_user_ops, int unix_fd );
-extern int get_unix_fd( struct object *obj );
+extern void *get_fd_user( struct fd *fd );
+extern int get_unix_fd( struct fd *fd );
 extern void set_unix_fd( struct object *obj, int unix_fd );
-extern void close_fd( struct fd *fd );
 extern void fd_poll_event( struct object *obj, int event );
+extern int check_fd_events( struct fd *fd, int events );
 
 extern int default_fd_add_queue( struct object *obj, struct wait_queue_entry *entry );
 extern void default_fd_remove_queue( struct object *obj, struct wait_queue_entry *entry );
 extern int default_fd_signaled( struct object *obj, struct thread *thread );
-extern int no_flush( struct object *obj );
-extern void no_queue_async(struct object *obj, void* ptr, unsigned int status, int type, int count);
+extern void default_poll_event( struct fd *fd, int event );
+extern int no_flush( struct fd *fd );
+extern int no_get_file_info( struct fd *fd, struct get_file_info_reply *info, int *flags );
+extern void no_queue_async( struct fd *fd, void* ptr, unsigned int status, int type, int count );
+
+inline static struct fd *get_obj_fd( struct object *obj ) { return obj->ops->get_fd( obj ); }
+
+/* file functions */
+
+extern struct file *get_file_obj( struct process *process, obj_handle_t handle,
+                                  unsigned int access );
+extern int get_file_unix_fd( struct file *file );
+extern int is_same_file( struct file *file1, struct file *file2 );
+extern int get_file_drive_type( struct file *file );
+extern int grow_file( struct file *file, int size_high, int size_low );
+extern int create_anonymous_file(void);
+extern struct file *create_temp_file( int access );
+extern void file_set_error(void);
 
 #endif  /* __WINE_SERVER_FILE_H */