r2520: - finished implementing the server side of the old style search requests
[gd/samba-autobuild/.git] / source4 / include / smb_interfaces.h
index 70cff11395fdc3cd87481b8a4e9e65d3f4c33330..4acdf51b56409a34ffe6719e2199bcfcc4d16342 100644 (file)
@@ -2,6 +2,7 @@
    Unix SMB/CIFS implementation.
    SMB request interface structures
    Copyright (C) Andrew Tridgell                       2003
+   Copyright (C) James J Myers 2003 <myersjj@samba.org>
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 */
 
 
-typedef SMB_BIG_UINT large_t;
-
 /* Globally Unique ID */
 #define GUID_SIZE 16
-typedef struct guid_info
-{
-       uint8 info[GUID_SIZE];
-} GUID;
 
-/* 64 bit time (100usec) 1601 - cifs6.txt, section 3.5, page 30 */
-typedef struct nttime_info
-{
-       uint32 low;
-       uint32 high;
-} NTTIME;
+/* 64 bit time (100 nanosec) 1601 - cifs6.txt, section 3.5, page 30 */
+typedef uint64_t NTTIME;
+
+/* 8 byte aligned 'hyper' type from MS IDL */
+typedef uint64_t HYPER_T;
+
 
 
 /* this structure is just a wrapper for a string, the only reason we
@@ -41,18 +36,18 @@ typedef struct nttime_info
    on the wire in testsuite test code to ensure that we are
    terminating names in the same way that win2003 is. The *ONLY* time
    you should ever look at the 'private_length' field in this
-   structure is inside compliance test code, in all cases just use the
-   null terminated char* as the definitive definition of the
+   structure is inside compliance test code, in all other cases just
+   use the null terminated char* as the definitive definition of the
    string
 
    also note that this structure is only used in packets where there
    is an explicit length provided on the wire (hence the name). That
    length is placed in 'private_length'. For packets where the length
    is always determined by NULL or packet termination a normal char*
-   is used.
+   is used in the structure definition.
  */
 typedef struct {
-       uint32 private_length;
+       uint32_t private_length;
        const char *s;
 } WIRE_STRING;
 
@@ -65,12 +60,12 @@ typedef struct {
 /* struct used for SMBlseek call */
 struct smb_seek {
        struct {
-               uint16 fnum;
-               uint16 mode;
-               int32  offset; /* signed */
+               uint16_t fnum;
+               uint16_t mode;
+               int32_t  offset; /* signed */
        } in;
        struct {
-               uint32 offset;
+               int32_t offset;
        } out;
 };
 
@@ -79,7 +74,7 @@ struct smb_seek {
 struct smb_unlink {
        struct {
                const char *pattern;
-               uint16 attrib;
+               uint16_t attrib;
        } in;
 };
 
@@ -91,24 +86,24 @@ struct smb_chkpath {
        } in;
 };
 
-enum mkdir_level {RAW_MKDIR_GENERIC, RAW_MKDIR_MKDIR, RAW_MKDIR_T2MKDIR};
+enum smb_mkdir_level {RAW_MKDIR_GENERIC, RAW_MKDIR_MKDIR, RAW_MKDIR_T2MKDIR};
 
 /* union used in mkdir() call */
 union smb_mkdir {
        /* generic level */
        struct {
-               enum mkdir_level level;
+               enum smb_mkdir_level level;
        } generic;
 
        struct {
-               enum mkdir_level level;
+               enum smb_mkdir_level level;
                struct {
                        const char *path;
                } in;
        } mkdir;
 
        struct {
-               enum mkdir_level level;
+               enum smb_mkdir_level level;
                struct {
                        const char *path;
                        uint_t num_eas;
@@ -125,26 +120,51 @@ struct smb_rmdir {
 };
 
 /* struct used in rename() call */
-struct smb_rename {
+enum smb_rename_level {RAW_RENAME_RENAME, RAW_RENAME_NTRENAME};
+
+union smb_rename {
        struct {
-               const char *pattern1;
-               const char *pattern2;
-               uint16 attrib;
-       } in;
+               enum smb_rename_level level;
+       } generic;
+
+       /* SMBrename interface */
+       struct {
+               enum smb_rename_level level;
+
+               struct {
+                       const char *pattern1;
+                       const char *pattern2;
+                       uint16_t attrib;
+               } in;
+       } rename;
+
+
+       /* SMBntrename interface */
+       struct {
+               enum smb_rename_level level;
+
+               struct {
+                       uint16_t attrib;
+                       uint16_t flags; /* see RENAME_FLAG_* */
+                       uint32_t cluster_size;
+                       const char *old_name;
+                       const char *new_name;
+               } in;
+       } ntrename;
 };
 
-enum tcon_level {RAW_TCON_TCON, RAW_TCON_TCONX};
+enum smb_tcon_level {RAW_TCON_TCON, RAW_TCON_TCONX};
 
 /* union used in tree connect call */
 union smb_tcon {
        /* generic interface */
        struct {
-               enum tcon_level level;
+               enum smb_tcon_level level;
        } generic;
 
        /* SMBtcon interface */
        struct {
-               enum tcon_level level;
+               enum smb_tcon_level level;
 
                struct {
                        const char *service;
@@ -152,32 +172,32 @@ union smb_tcon {
                        const char *dev;
                } in;
                struct {
-                       uint16 max_xmit;
-                       uint16 cnum;
+                       uint16_t max_xmit;
+                       uint16_t cnum;
                } out;
        } tcon;
 
        /* SMBtconX interface */
        struct {
-               enum tcon_level level;
+               enum smb_tcon_level level;
 
                struct {
-                       uint16 flags;
+                       uint16_t flags;
                        DATA_BLOB password;
                        const char *path;
                        const char *device;
                } in;
                struct {
-                       uint16 options;
+                       uint16_t options;
                        char *dev_type;
                        char *fs_type;
-                       uint16 cnum;
+                       uint16_t cnum;
                } out;
        } tconx;
 };
 
 
-enum sesssetup_level {RAW_SESSSETUP_GENERIC, RAW_SESSSETUP_OLD, RAW_SESSSETUP_NT1, RAW_SESSSETUP_SPNEGO};
+enum smb_sesssetup_level {RAW_SESSSETUP_GENERIC, RAW_SESSSETUP_OLD, RAW_SESSSETUP_NT1, RAW_SESSSETUP_SPNEGO};
 
 /* union used in session_setup call */
 union smb_sesssetup {
@@ -185,17 +205,17 @@ union smb_sesssetup {
        /* generic interface - used for auto selecting based on negotiated
           protocol options */
        struct {
-               enum sesssetup_level level;
+               enum smb_sesssetup_level level;
 
                struct {
-                       uint32 sesskey;
-                       uint32 capabilities;
+                       uint32_t sesskey;
+                       uint32_t capabilities;
                        const char *password;
                        const char *user;
                        const char *domain;
                } in;
                struct {
-                       uint16 vuid;
+                       uint16_t vuid;
                        char *os;
                        char *lanman;
                        char *domain;
@@ -204,13 +224,13 @@ union smb_sesssetup {
 
        /* the pre-NT1 interface */
        struct {
-               enum sesssetup_level level;
+               enum smb_sesssetup_level level;
 
                struct {
-                       uint16 bufsize;
-                       uint16 mpx_max;
-                       uint16 vc_num;
-                       uint32 sesskey;
+                       uint16_t bufsize;
+                       uint16_t mpx_max;
+                       uint16_t vc_num;
+                       uint32_t sesskey;
                        DATA_BLOB password;
                        const char *user;
                        const char *domain;
@@ -218,8 +238,8 @@ union smb_sesssetup {
                        const char *lanman;
                } in;
                struct {
-                       uint16 action;
-                       uint16 vuid;
+                       uint16_t action;
+                       uint16_t vuid;
                        char *os;
                        char *lanman;
                        char *domain;
@@ -228,14 +248,14 @@ union smb_sesssetup {
 
        /* the NT1 interface */
        struct {
-               enum sesssetup_level level;
+               enum smb_sesssetup_level level;
 
                struct {
-                       uint16 bufsize;
-                       uint16 mpx_max;
-                       uint16 vc_num;
-                       uint32 sesskey;
-                       uint32 capabilities;
+                       uint16_t bufsize;
+                       uint16_t mpx_max;
+                       uint16_t vc_num;
+                       uint32_t sesskey;
+                       uint32_t capabilities;
                        DATA_BLOB password1;
                        DATA_BLOB password2;
                        const char *user;
@@ -244,8 +264,8 @@ union smb_sesssetup {
                        const char *lanman;
                } in;
                struct {
-                       uint16 action;
-                       uint16 vuid;
+                       uint16_t action;
+                       uint16_t vuid;
                        char *os;
                        char *lanman;
                        char *domain;
@@ -255,26 +275,26 @@ union smb_sesssetup {
 
        /* the SPNEGO interface */
        struct {
-               enum sesssetup_level level;
+               enum smb_sesssetup_level level;
 
                struct {
-                       uint16 bufsize;
-                       uint16 mpx_max;
-                       uint16 vc_num;
-                       uint32 sesskey;
-                       uint32 capabilities;
+                       uint16_t bufsize;
+                       uint16_t mpx_max;
+                       uint16_t vc_num;
+                       uint32_t sesskey;
+                       uint32_t capabilities;
                        DATA_BLOB secblob;
                        const char *os;
                        const char *lanman;
                        const char *domain;
                } in;
                struct {
-                       uint16 action;
+                       uint16_t action;
                        DATA_BLOB secblob;
                        char *os;
                        char *lanman;
                        char *domain;
-                       uint16 vuid;
+                       uint16_t vuid;
                } out;
        } spnego;
 };
@@ -282,7 +302,8 @@ union smb_sesssetup {
 /* Note that the specified enum values are identical to the actual info-levels used
  * on the wire.
  */
-enum fileinfo_level {RAW_FILEINFO_GENERIC                    = 0xF000, 
+enum smb_fileinfo_level {
+                    RAW_FILEINFO_GENERIC                    = 0xF000, 
                     RAW_FILEINFO_GETATTR,                   /* SMBgetatr */
                     RAW_FILEINFO_GETATTRE,                  /* SMBgetattrE */
                     RAW_FILEINFO_STANDARD                   = SMB_QFILEINFO_STANDARD,
@@ -322,22 +343,22 @@ union smb_fileinfo {
        /* generic interface:
         * matches RAW_FILEINFO_GENERIC */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
 
                /* each level can be called on either a pathname or a
                 * filename, in either case the return format is
                 * identical */
                union smb_fileinfo_in {
                        const char *fname;
-                       uint16 fnum;
+                       uint16_t fnum;
                } in;
                
                struct {
-                       uint16 attrib;
-                       uint32 ea_size;
+                       uint32_t attrib;
+                       uint32_t ea_size;
                        uint_t num_eas;
                        struct ea_struct {
-                               uint8 flags;
+                               uint8_t flags;
                                WIRE_STRING name;
                                DATA_BLOB value;
                        } *eas;         
@@ -345,30 +366,28 @@ union smb_fileinfo {
                        NTTIME access_time;
                        NTTIME write_time;
                        NTTIME change_time;
-                       uint32 ex_attrib;       
-                       large_t alloc_size;
-                       large_t size;
-                       uint32 nlink;
+                       uint64_t alloc_size;
+                       uint64_t size;
+                       uint32_t nlink;
                        WIRE_STRING fname;      
                        WIRE_STRING alt_fname;  
-                       uint8 delete_pending;
-                       uint8 directory;
-                       large_t compressed_size;
-                       uint16 format;
-                       uint8 unit_shift;
-                       uint8 chunk_shift;
-                       uint8 cluster_shift;
-                       uint32 device;
-                       uint32 inode;
-                       uint32 access_flags; /* seen 0x001f01ff from w2k3 */
-                       large_t position;
-                       uint32 mode;
-                       uint32 alignment_requirement;
-                       uint32 reparse_tag;
+                       uint8_t delete_pending;
+                       uint8_t directory;
+                       uint64_t compressed_size;
+                       uint16_t format;
+                       uint8_t unit_shift;
+                       uint8_t chunk_shift;
+                       uint8_t cluster_shift;
+                       uint64_t file_id;
+                       uint32_t access_flags; /* seen 0x001f01ff from w2k3 */
+                       uint64_t position;
+                       uint32_t mode;
+                       uint32_t alignment_requirement;
+                       uint32_t reparse_tag;
                        uint_t num_streams;
                        struct stream_struct {
-                               large_t size;
-                               large_t alloc_size;
+                               uint64_t size;
+                               uint64_t alloc_size;
                                WIRE_STRING stream_name;
                        } *streams;
                } out;
@@ -378,65 +397,65 @@ union smb_fileinfo {
        /* SMBgetatr interface:
         * matches RAW_FILEINFO_GETATTR */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       uint16 attrib;
-                       uint32 size;
+                       uint16_t attrib;
+                       uint32_t size;
                        time_t write_time;
                } out;
        } getattr;
 
        /* SMBgetattrE interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
                        time_t create_time;
                        time_t access_time;
                        time_t write_time;
-                       uint32 size;
-                       uint32 alloc_size;
-                       uint16 attrib;
+                       uint32_t size;
+                       uint32_t alloc_size;
+                       uint16_t attrib;
                } out;
        } getattre;
 
        /* trans2 RAW_FILEINFO_STANDARD interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
                        time_t create_time;
                        time_t access_time;
                        time_t write_time;
-                       uint32 size;
-                       uint32 alloc_size;
-                       uint16 attrib;
+                       uint32_t size;
+                       uint32_t alloc_size;
+                       uint16_t attrib;
                } out;
        } standard;
 
        /* trans2 RAW_FILEINFO_EA_SIZE interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
                        time_t create_time;
                        time_t access_time;
                        time_t write_time;
-                       uint32 size;
-                       uint32 alloc_size;
-                       uint16 attrib;
-                       uint32 ea_size;
+                       uint32_t size;
+                       uint32_t alloc_size;
+                       uint16_t attrib;
+                       uint32_t ea_size;
                } out;
        } ea_size;
 
        /* trans2 RAW_FILEINFO_ALL_EAS interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
@@ -449,13 +468,13 @@ union smb_fileinfo {
        /* trans2 qpathinfo RAW_FILEINFO_IS_NAME_VALID interface 
           only valid for a QPATHNAME call - no returned data */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
        } is_name_valid;
 
        /* RAW_FILEINFO_BASIC_INFO and RAW_FILEINFO_BASIC_INFORMATION interfaces */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
@@ -463,20 +482,20 @@ union smb_fileinfo {
                        NTTIME access_time;
                        NTTIME write_time;
                        NTTIME change_time;
-                       uint32 attrib;
+                       uint32_t attrib;
                } out;
        } basic_info;
                
 
        /* RAW_FILEINFO_STANDARD_INFO and RAW_FILEINFO_STANDARD_INFORMATION interfaces */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       large_t alloc_size;
-                       large_t size;
-                       uint32 nlink;
+                       uint64_t alloc_size;
+                       uint64_t size;
+                       uint32_t nlink;
                        BOOL delete_pending;
                        BOOL directory;
                } out;
@@ -484,17 +503,17 @@ union smb_fileinfo {
        
        /* RAW_FILEINFO_EA_INFO and RAW_FILEINFO_EA_INFORMATION interfaces */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       uint32 ea_size;
+                       uint32_t ea_size;
                } out;
        } ea_info;
 
        /* RAW_FILEINFO_NAME_INFO and RAW_FILEINFO_NAME_INFORMATION interfaces */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
@@ -504,7 +523,7 @@ union smb_fileinfo {
 
        /* RAW_FILEINFO_ALL_INFO and RAW_FILEINFO_ALL_INFORMATION interfaces */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
@@ -512,20 +531,20 @@ union smb_fileinfo {
                        NTTIME access_time;
                        NTTIME write_time;
                        NTTIME change_time;
-                       uint32 attrib;
-                       large_t alloc_size;
-                       large_t size;
-                       uint32 nlink;
-                       uint8 delete_pending;
-                       uint8 directory;
-                       uint32 ea_size;
+                       uint32_t attrib;
+                       uint64_t alloc_size;
+                       uint64_t size;
+                       uint32_t nlink;
+                       uint8_t delete_pending;
+                       uint8_t directory;
+                       uint32_t ea_size;
                        WIRE_STRING fname;
                } out;
        } all_info;     
 
        /* RAW_FILEINFO_ALT_NAME_INFO and RAW_FILEINFO_ALT_NAME_INFORMATION interfaces */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
@@ -535,7 +554,7 @@ union smb_fileinfo {
 
        /* RAW_FILEINFO_STREAM_INFO and RAW_FILEINFO_STREAM_INFORMATION interfaces */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
@@ -546,43 +565,43 @@ union smb_fileinfo {
        
        /* RAW_FILEINFO_COMPRESSION_INFO and RAW_FILEINFO_COMPRESSION_INFORMATION interfaces */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       large_t compressed_size;
-                       uint16 format;
-                       uint8 unit_shift;
-                       uint8 chunk_shift;
-                       uint8 cluster_shift;
+                       uint64_t compressed_size;
+                       uint16_t format;
+                       uint8_t unit_shift;
+                       uint8_t chunk_shift;
+                       uint8_t cluster_shift;
                } out;
        } compression_info;
 
        /* RAW_FILEINFO_UNIX_BASIC interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       large_t end_of_file;
-                       large_t num_bytes;
+                       uint64_t end_of_file;
+                       uint64_t num_bytes;
                        NTTIME status_change_time;
                        NTTIME access_time;
                        NTTIME change_time;
-                       large_t uid;
-                       large_t gid;
-                       uint32 file_type;
-                       large_t dev_major;
-                       large_t dev_minor;
-                       large_t unique_id;
-                       large_t permissions;
-                       large_t nlink;
+                       uint64_t uid;
+                       uint64_t gid;
+                       uint32_t file_type;
+                       uint64_t dev_major;
+                       uint64_t dev_minor;
+                       uint64_t unique_id;
+                       uint64_t permissions;
+                       uint64_t nlink;
                } out;
        } unix_basic_info;
 
        /* RAW_FILEINFO_UNIX_LINK interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
@@ -592,60 +611,57 @@ union smb_fileinfo {
 
        /* RAW_FILEINFO_INTERNAL_INFORMATION interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       /* REWRITE: these are very uncertain - we need
-                        * to look at this interface */
-                       uint32 device;
-                       uint32 inode;
+                       uint64_t file_id;
                } out;
        } internal_information;
 
        /* RAW_FILEINFO_ACCESS_INFORMATION interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       uint32 access_flags; /* seen 0x001f01ff from w2k3 */
+                       uint32_t access_flags; /* seen 0x001f01ff from w2k3 */
                } out;
        } access_information;
 
        /* RAW_FILEINFO_POSITION_INFORMATION interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       large_t position;
+                       uint64_t position;
                } out;
        } position_information;
 
        /* RAW_FILEINFO_MODE_INFORMATION interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       uint32 mode;
+                       uint32_t mode;
                } out;
        } mode_information;
 
        /* RAW_FILEINFO_ALIGNMENT_INFORMATION interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       uint32 alignment_requirement;
+                       uint32_t alignment_requirement;
                } out;
        } alignment_information;
 
        /* RAW_FILEINFO_NETWORK_OPEN_INFORMATION interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
@@ -653,27 +669,27 @@ union smb_fileinfo {
                        NTTIME access_time;
                        NTTIME write_time;
                        NTTIME change_time;
-                       large_t alloc_size;
-                       large_t size;
-                       uint32 attrib;
+                       uint64_t alloc_size;
+                       uint64_t size;
+                       uint32_t attrib;
                } out;
        } network_open_information;
 
 
        /* RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION interface */
        struct {
-               enum fileinfo_level level;
+               enum smb_fileinfo_level level;
                union smb_fileinfo_in in;
 
                struct {
-                       uint32 attrib;
-                       uint32 reparse_tag;
+                       uint32_t attrib;
+                       uint32_t reparse_tag;
                } out;
        } attribute_tag_information;
 };
 
 
-enum setfileinfo_level {
+enum smb_setfileinfo_level {
        RAW_SFILEINFO_GENERIC                 = 0xF000, 
        RAW_SFILEINFO_SETATTR,                /* SMBsetatr */
        RAW_SFILEINFO_SETATTRE,               /* SMBsetattrE */
@@ -705,29 +721,29 @@ enum setfileinfo_level {
 union smb_setfileinfo {
        /* generic interface */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
 
                /* we are combining setfileinfo and setpathinfo into one 
                   interface */
                union setfileinfo_file {
                        const char *fname;
-                       uint16 fnum;
+                       uint16_t fnum;
                } file;
        } generic;
 
        /* RAW_SFILEINFO_SETATTR (SMBsetatr) interface - only via setpathinfo() */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
                struct {
-                       uint16 attrib;
+                       uint16_t attrib;
                        time_t write_time;
                } in;
        } setattr;
 
        /* RAW_SFILEINFO_SETATTRE (SMBsetattrE) interface - only via setfileinfo() */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
 
                struct {
@@ -740,7 +756,7 @@ union smb_setfileinfo {
        
        /* RAW_SFILEINFO_STANDARD interface */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
                struct {
                        time_t create_time;
@@ -753,7 +769,7 @@ union smb_setfileinfo {
 
        /* RAW_SFILEINFO_EA_SET interface */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
                struct {
                        struct ea_struct ea;
@@ -763,7 +779,7 @@ union smb_setfileinfo {
        /* RAW_SFILEINFO_BASIC_INFO and
           RAW_SFILEINFO_BASIC_INFORMATION interfaces */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
 
                struct {
@@ -771,14 +787,14 @@ union smb_setfileinfo {
                        NTTIME access_time;
                        NTTIME write_time;
                        NTTIME change_time;
-                       uint32 attrib;
+                       uint32_t attrib;
                } in;
        } basic_info;
 
        /* RAW_SFILEINFO_DISPOSITION_INFO and 
           RAW_SFILEINFO_DISPOSITION_INFORMATION interfaces */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
 
                struct {
@@ -789,56 +805,56 @@ union smb_setfileinfo {
        /* RAW_SFILEINFO_ALLOCATION_INFO and 
           RAW_SFILEINFO_ALLOCATION_INFORMATION interfaces */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
 
                struct {
                        /* w2k3 rounds this up to nearest 4096 */
-                       large_t alloc_size;
+                       uint64_t alloc_size;
                } in;
        } allocation_info;
        
        /* RAW_SFILEINFO_END_OF_FILE_INFO and 
           RAW_SFILEINFO_END_OF_FILE_INFORMATION interfaces */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
 
                struct {
-                       large_t size;
+                       uint64_t size;
                } in;
        } end_of_file_info;
 
        /* RAW_SFILEINFO_RENAME_INFORMATION interface */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
 
                struct {
-                       uint8 overwrite;
-                       uint32 root_fid;
+                       uint8_t overwrite;
+                       uint32_t root_fid;
                        const char *new_name;
                } in;
        } rename_information;
 
        /* RAW_SFILEINFO_POSITION_INFORMATION interface */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
 
                struct {
-                       large_t position;
+                       uint64_t position;
                } in;
        } position_information;
 
        /* RAW_SFILEINFO_MODE_INFORMATION interface */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
 
                struct {
                        /* valid values seem to be 0, 2, 4 and 6 */
-                       uint32 mode;
+                       uint32_t mode;
                } in;
        } mode_information;
 
@@ -846,29 +862,29 @@ union smb_setfileinfo {
 
        /* RAW_SFILEINFO_UNIX_BASIC interface */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
                struct {
-                       uint32 mode; /* yuck - this field remains to fix compile of libcli/clifile.c */
-                       large_t end_of_file;
-                       large_t num_bytes;
+                       uint32_t mode; /* yuck - this field remains to fix compile of libcli/clifile.c */
+                       uint64_t end_of_file;
+                       uint64_t num_bytes;
                        NTTIME status_change_time;
                        NTTIME access_time;
                        NTTIME change_time;
-                       large_t uid;
-                       large_t gid;
-                       uint32 file_type;
-                       large_t dev_major;
-                       large_t dev_minor;
-                       large_t unique_id;
-                       large_t permissions;
-                       large_t nlink;
+                       uint64_t uid;
+                       uint64_t gid;
+                       uint32_t file_type;
+                       uint64_t dev_major;
+                       uint64_t dev_minor;
+                       uint64_t unique_id;
+                       uint64_t permissions;
+                       uint64_t nlink;
                } in;
        } unix_basic;
        
        /* RAW_SFILEINFO_UNIX_LINK, RAW_SFILEINFO_UNIX_HLINK interface */
        struct {
-               enum setfileinfo_level level;
+               enum smb_setfileinfo_level level;
                union setfileinfo_file file;
                struct {
                        const char *link_dest;
@@ -877,7 +893,8 @@ union smb_setfileinfo {
 };
 
 
-enum fsinfo_level {RAW_QFS_GENERIC                        = 0xF000, 
+enum smb_fsinfo_level {
+                  RAW_QFS_GENERIC                        = 0xF000, 
                   RAW_QFS_DSKATTR,                         /* SMBdskattr */
                   RAW_QFS_ALLOCATION                     = SMB_QFS_ALLOCATION,
                   RAW_QFS_VOLUME                         = SMB_QFS_VOLUME,
@@ -900,23 +917,23 @@ enum fsinfo_level {RAW_QFS_GENERIC                        = 0xF000,
 union smb_fsinfo {
        /* generic interface */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       uint32 block_size;
-                       large_t blocks_total;
-                       large_t blocks_free;
-                       uint32 fs_id;
+                       uint32_t block_size;
+                       uint64_t blocks_total;
+                       uint64_t blocks_free;
+                       uint32_t fs_id;
                        NTTIME create_time;
-                       uint32 serial_number;
-                       uint32 fs_attr;
-                       uint32 max_file_component_length;
-                       uint32 device_type;
-                       uint32 device_characteristics;
-                       large_t quota_soft;
-                       large_t quota_hard;
-                       large_t quota_flags;
-                       GUID guid;
+                       uint32_t serial_number;
+                       uint32_t fs_attr;
+                       uint32_t max_file_component_length;
+                       uint32_t device_type;
+                       uint32_t device_characteristics;
+                       uint64_t quota_soft;
+                       uint64_t quota_hard;
+                       uint64_t quota_flags;
+                       struct GUID guid;
                        char *volume_name;
                        char *fs_type;
                } out;
@@ -924,80 +941,80 @@ union smb_fsinfo {
 
        /* SMBdskattr interface */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       uint16 units_total;
-                       uint16 blocks_per_unit;
-                       uint16 block_size;
-                       uint16 units_free;
+                       uint16_t units_total;
+                       uint16_t blocks_per_unit;
+                       uint16_t block_size;
+                       uint16_t units_free;
                } out;
        } dskattr;
 
        /* trans2 RAW_QFS_ALLOCATION interface */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       uint32 fs_id;
-                       uint32 sectors_per_unit;
-                       uint32 total_alloc_units;
-                       uint32 avail_alloc_units;
-                       uint16 bytes_per_sector;
+                       uint32_t fs_id;
+                       uint32_t sectors_per_unit;
+                       uint32_t total_alloc_units;
+                       uint32_t avail_alloc_units;
+                       uint16_t bytes_per_sector;
                } out;
        } allocation;
 
        /* TRANS2 RAW_QFS_VOLUME interface */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       uint32 serial_number;
+                       uint32_t serial_number;
                        WIRE_STRING volume_name;
                } out;
        } volume;
 
        /* TRANS2 RAW_QFS_VOLUME_INFO and RAW_QFS_VOLUME_INFORMATION interfaces */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
                        NTTIME create_time;
-                       uint32 serial_number;
+                       uint32_t serial_number;
                        WIRE_STRING volume_name;
                } out;
        } volume_info;
 
        /* trans2 RAW_QFS_SIZE_INFO and RAW_QFS_SIZE_INFORMATION interfaces */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       large_t total_alloc_units;
-                       large_t avail_alloc_units; /* maps to call_avail_alloc_units */
-                       uint32 sectors_per_unit;
-                       uint32 bytes_per_sector;
+                       uint64_t total_alloc_units;
+                       uint64_t avail_alloc_units; /* maps to call_avail_alloc_units */
+                       uint32_t sectors_per_unit;
+                       uint32_t bytes_per_sector;
                } out;
        } size_info;
 
        /* TRANS2 RAW_QFS_DEVICE_INFO and RAW_QFS_DEVICE_INFORMATION interfaces */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       uint32 device_type;
-                       uint32 characteristics;
+                       uint32_t device_type;
+                       uint32_t characteristics;
                } out;
        } device_info;
 
 
        /* TRANS2 RAW_QFS_ATTRIBUTE_INFO and RAW_QFS_ATTRIBUTE_INFORMATION interfaces */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       uint32 fs_attr;
-                       uint32 max_file_component_length;
+                       uint32_t fs_attr;
+                       uint32_t max_file_component_length;
                        WIRE_STRING fs_type;
                } out;
        } attribute_info;
@@ -1005,55 +1022,57 @@ union smb_fsinfo {
 
        /* TRANS2 RAW_QFS_UNIX_INFO interface */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       uint16 major_version;
-                       uint16 minor_version;
-                       large_t capability;
+                       uint16_t major_version;
+                       uint16_t minor_version;
+                       uint64_t capability;
                } out;
        } unix_info;
 
        /* trans2 RAW_QFS_QUOTA_INFORMATION interface */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       large_t unknown[3];
-                       large_t quota_soft;
-                       large_t quota_hard;
-                       large_t quota_flags;
+                       uint64_t unknown[3];
+                       uint64_t quota_soft;
+                       uint64_t quota_hard;
+                       uint64_t quota_flags;
                } out;
        } quota_information;    
 
        /* trans2 RAW_QFS_FULL_SIZE_INFORMATION interface */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       large_t total_alloc_units;
-                       large_t call_avail_alloc_units;
-                       large_t actual_avail_alloc_units;
-                       uint32 sectors_per_unit;
-                       uint32 bytes_per_sector;
+                       uint64_t total_alloc_units;
+                       uint64_t call_avail_alloc_units;
+                       uint64_t actual_avail_alloc_units;
+                       uint32_t sectors_per_unit;
+                       uint32_t bytes_per_sector;
                } out;
        } full_size_information;
 
        /* trans2 RAW_QFS_OBJECTID_INFORMATION interface */
        struct {
-               enum fsinfo_level level;
+               enum smb_fsinfo_level level;
 
                struct {
-                       GUID  guid;
-                       large_t unknown[6];
+                       struct GUID  guid;
+                       uint64_t unknown[6];
                } out;
        } objectid_information; 
 };
 
 
 
-enum open_level {RAW_OPEN_OPEN, RAW_OPEN_OPENX, 
-                RAW_OPEN_MKNEW, RAW_OPEN_CTEMP, RAW_OPEN_SPLOPEN,
+enum smb_open_level {
+                RAW_OPEN_OPEN, RAW_OPEN_OPENX, 
+                RAW_OPEN_MKNEW, RAW_OPEN_CREATE, 
+                RAW_OPEN_CTEMP, RAW_OPEN_SPLOPEN,
                 RAW_OPEN_NTCREATEX, RAW_OPEN_T2OPEN};
 
 /* the generic interface is defined to be equal to the NTCREATEX interface */
@@ -1063,144 +1082,147 @@ enum open_level {RAW_OPEN_OPEN, RAW_OPEN_OPENX,
 union smb_open {
        /* SMBNTCreateX interface */
        struct {
-               enum open_level level;
-
-               struct {
-                       uint32 flags;
-                       uint32 root_fid;
-                       uint32 access_mask;
-                       large_t alloc_size;
-                       uint32 file_attr;
-                       uint32 share_access;
-                       uint32 open_disposition;
-                       uint32 create_options;
-                       uint32 impersonation;
-                       uint8  security_flags;
+               enum smb_open_level level;
+
+               struct {
+                       uint32_t flags;
+                       uint32_t root_fid;
+                       uint32_t access_mask;
+                       uint64_t alloc_size;
+                       uint32_t file_attr;
+                       uint32_t share_access;
+                       uint32_t open_disposition;
+                       uint32_t create_options;
+                       uint32_t impersonation;
+                       uint8_t  security_flags;
+                       /* NOTE: fname can also be a pointer to a
+                        uint64_t file_id if create_options has the
+                        NTCREATEX_OPTIONS_OPEN_BY_FILE_ID flag set */
                        const char *fname;
                } in;
 
                struct {
-                       uint8 oplock_level;
-                       uint16 fnum;
-                       uint32 create_action;
+                       uint8_t oplock_level;
+                       uint16_t fnum;
+                       uint32_t create_action;
                        NTTIME create_time;
                        NTTIME access_time;
                        NTTIME write_time;
                        NTTIME change_time;
-                       uint32 attrib;
-                       large_t alloc_size;
-                       large_t size;
-                       uint16 file_type;
-                       uint16 ipc_state;
-                       uint8  is_directory;
+                       uint32_t attrib;
+                       uint64_t alloc_size;
+                       uint64_t size;
+                       uint16_t file_type;
+                       uint16_t ipc_state;
+                       uint8_t  is_directory;
                } out;
        } ntcreatex, generic;
 
        /* TRANS2_OPEN interface */
        struct {
-               enum open_level level;
+               enum smb_open_level level;
 
                struct {
-                       uint16 flags;
-                       uint16 open_mode;
-                       uint16 file_attrs;
+                       uint16_t flags;
+                       uint16_t open_mode;
+                       uint16_t file_attrs;
                        time_t write_time;
-                       uint16 open_func;
-                       uint32 size;
-                       uint32 timeout;
+                       uint16_t open_func;
+                       uint32_t size;
+                       uint32_t timeout;
                        const char *fname;
                        uint_t num_eas;
                        struct ea_struct *eas;                  
                } in;
 
                struct {
-                       uint16 fnum;
-                       uint16 attrib;
+                       uint16_t fnum;
+                       uint16_t attrib;
                        time_t write_time;
-                       uint32 size;
-                       uint16 access;
-                       uint16 ftype;
-                       uint16 devstate;
-                       uint16 action;
-                       uint32 unknown;
+                       uint32_t size;
+                       uint16_t access;
+                       uint16_t ftype;
+                       uint16_t devstate;
+                       uint16_t action;
+                       uint32_t unknown;
                } out;
        } t2open;
 
        /* SMBopen interface */
        struct {
-               enum open_level level;
+               enum smb_open_level level;
 
                struct {
-                       uint16 flags;
-                       uint16 search_attrs;
+                       uint16_t flags;
+                       uint16_t search_attrs;
                        const char *fname;
                } in;
                struct {
-                       uint16 fnum;
-                       uint16 attrib;
+                       uint16_t fnum;
+                       uint16_t attrib;
                        time_t write_time;
-                       uint32 size;
-                       uint16 rmode;
+                       uint32_t size;
+                       uint16_t rmode;
                } out;
        } open;
 
        /* SMBopenX interface */
        struct {
-               enum open_level level;
+               enum smb_open_level level;
 
                struct {
-                       uint16 flags;
-                       uint16 open_mode;
-                       uint16 search_attrs; /* not honoured by win2003 */
-                       uint16 file_attrs;
+                       uint16_t flags;
+                       uint16_t open_mode;
+                       uint16_t search_attrs; /* not honoured by win2003 */
+                       uint16_t file_attrs;
                        time_t write_time; /* not honoured by win2003 */
-                       uint16 open_func;
-                       uint32 size; /* note that this sets the
+                       uint16_t open_func;
+                       uint32_t size; /* note that this sets the
                                        initial file size, not
                                        just allocation size */
-                       uint32 timeout; /* not honoured by win2003 */
+                       uint32_t timeout; /* not honoured by win2003 */
                        const char *fname;
                } in;
                struct {
-                       uint16 fnum;
-                       uint16 attrib;
+                       uint16_t fnum;
+                       uint16_t attrib;
                        time_t write_time;
-                       uint32 size;
-                       uint16 access;
-                       uint16 ftype;
-                       uint16 devstate;
-                       uint16 action;
-                       uint32 unique_fid;
-                       uint32 access_mask;
-                       uint32 unknown;
+                       uint32_t size;
+                       uint16_t access;
+                       uint16_t ftype;
+                       uint16_t devstate;
+                       uint16_t action;
+                       uint32_t unique_fid;
+                       uint32_t access_mask;
+                       uint32_t unknown;
                } out;
        } openx;
 
        /* SMBmknew interface */
        struct {
-               enum open_level level;
+               enum smb_open_level level;
 
                struct {
-                       uint16 attrib;
+                       uint16_t attrib;
                        time_t write_time;
                        const char *fname;
                } in;
                struct {
-                       uint16 fnum;
+                       uint16_t fnum;
                } out;
-       } mknew;
+       } mknew, create;
 
        /* SMBctemp interface */
        struct {
-               enum open_level level;
+               enum smb_open_level level;
 
                struct {
-                       uint16 attrib;
+                       uint16_t attrib;
                        time_t write_time;
                        const char *directory;
                } in;
                struct {
-                       uint16 fnum;
+                       uint16_t fnum;
                        /* temp name, relative to directory */
                        char *name; 
                } out;
@@ -1208,22 +1230,22 @@ union smb_open {
 
        /* SMBsplopen interface */
        struct {
-               enum open_level level;
+               enum smb_open_level level;
 
                struct {
-                       uint16 setup_length;
-                       uint16 mode;
+                       uint16_t setup_length;
+                       uint16_t mode;
                        const char *ident;
                } in;
                struct {
-                       uint16 fnum;
+                       uint16_t fnum;
                } out;
        } splopen;
 };
 
 
 
-enum read_level {RAW_READ_GENERIC, RAW_READ_READBRAW, RAW_READ_LOCKREAD, RAW_READ_READ, RAW_READ_READX};
+enum smb_read_level {RAW_READ_GENERIC, RAW_READ_READBRAW, RAW_READ_LOCKREAD, RAW_READ_READ, RAW_READ_READX};
 
 /* union for read() backend call 
 
@@ -1233,92 +1255,93 @@ enum read_level {RAW_READ_GENERIC, RAW_READ_READBRAW, RAW_READ_LOCKREAD, RAW_REA
 union smb_read {
        /* generic interface */
        struct {
-               enum read_level level;
+               enum smb_read_level level;
 
                struct {
-                       uint16 fnum;
-                       SMB_BIG_UINT offset;
-                       uint32    size;
+                       uint16_t fnum;
+                       uint64_t offset;
+                       uint32_t    size;
                } in;
                struct {
                        char *data;
-                       uint32 nread;
+                       uint32_t nread;
                } out;
        } generic;
 
 
        /* SMBreadbraw interface */
        struct {
-               enum read_level level;
+               enum smb_read_level level;
 
                struct {
-                       uint16 fnum;
-                       SMB_BIG_UINT offset;
-                       uint16  maxcnt;
-                       uint16  mincnt;
-                       uint32  timeout;
+                       uint16_t fnum;
+                       uint64_t offset;
+                       uint16_t  maxcnt;
+                       uint16_t  mincnt;
+                       uint32_t  timeout;
                } in;
                struct {
                        char *data;
-                       uint32 nread;
+                       uint32_t nread;
                } out;
        } readbraw;
 
 
        /* SMBlockandread interface */
        struct {
-               enum read_level level;
+               enum smb_read_level level;
 
                struct {
-                       uint16 fnum;
-                       uint16 count;
-                       uint32 offset;
-                       uint16 remaining;
+                       uint16_t fnum;
+                       uint16_t count;
+                       uint32_t offset;
+                       uint16_t remaining;
                } in;
                struct {
                        char *data;
-                       uint16 nread;
+                       uint16_t nread;
                } out;
        } lockread;
 
        /* SMBread interface */
        struct {
-               enum read_level level;
+               enum smb_read_level level;
 
                struct {
-                       uint16 fnum;
-                       uint16 count;
-                       uint32 offset;
-                       uint16 remaining;
+                       uint16_t fnum;
+                       uint16_t count;
+                       uint32_t offset;
+                       uint16_t remaining;
                } in;
                struct {
                        char *data;
-                       uint16 nread;
+                       uint16_t nread;
                } out;
        } read;
 
        /* SMBreadX interface */
        struct {
-               enum read_level level;
+               enum smb_read_level level;
 
                struct {
-                       uint16 fnum;
-                       SMB_BIG_UINT offset;
-                       uint16 mincnt;
-                       uint16 maxcnt;
-                       uint16 remaining;
+                       uint16_t fnum;
+                       uint64_t offset;
+                       uint16_t mincnt;
+                       uint16_t maxcnt;
+                       uint16_t remaining;
                } in;
                struct {
                        char *data;
-                       uint16 remaining;
-                       uint16 compaction_mode;
-                       uint16 nread;
+                       uint16_t remaining;
+                       uint16_t compaction_mode;
+                       uint16_t nread;
                } out;
        } readx;
 };
 
 
-enum write_level {RAW_WRITE_GENERIC, RAW_WRITE_WRITEUNLOCK, RAW_WRITE_WRITE, 
+enum smb_write_level {
+                 RAW_WRITE_GENERIC, RAW_WRITE_WRITEUNLOCK, RAW_WRITE_WRITE, 
                  RAW_WRITE_WRITEX, RAW_WRITE_WRITECLOSE, RAW_WRITE_SPLWRITE};
 
 /* union for write() backend call 
@@ -1326,156 +1349,153 @@ enum write_level {RAW_WRITE_GENERIC, RAW_WRITE_WRITEUNLOCK, RAW_WRITE_WRITE,
 union smb_write {
        /* generic interface */
        struct {
-               enum write_level level;
+               enum smb_write_level level;
 
                struct {
-                       uint16 fnum;
-                       SMB_BIG_UINT offset;
-                       uint32    count;
+                       uint16_t fnum;
+                       uint64_t offset;
+                       uint32_t    count;
                        const char *data;
                } in;
                struct {
-                       uint32 nwritten;
+                       uint32_t nwritten;
                } out;
        } generic;
 
 
        /* SMBwriteunlock interface */
        struct {
-               enum write_level level;
+               enum smb_write_level level;
 
                struct {
-                       uint16 fnum;
-                       uint16 count;
-                       uint32 offset;
-                       uint16 remaining;
+                       uint16_t fnum;
+                       uint16_t count;
+                       uint32_t offset;
+                       uint16_t remaining;
                        const char *data;
                } in;
                struct {
-                       uint32 nwritten;
+                       uint32_t nwritten;
                } out;
        } writeunlock;
 
        /* SMBwrite interface */
        struct {
-               enum write_level level;
+               enum smb_write_level level;
 
                struct {
-                       uint16 fnum;
-                       uint16 count;
-                       uint32 offset;
-                       uint16 remaining;
+                       uint16_t fnum;
+                       uint16_t count;
+                       uint32_t offset;
+                       uint16_t remaining;
                        const char *data;
                } in;
                struct {
-                       uint16 nwritten;
+                       uint16_t nwritten;
                } out;
        } write;
 
        /* SMBwriteX interface */
        struct {
-               enum write_level level;
+               enum smb_write_level level;
 
                struct {
-                       uint16 fnum;
-                       SMB_BIG_UINT offset;
-                       uint16 wmode;
-                       uint16 remaining;
-                       uint32 count;
+                       uint16_t fnum;
+                       uint64_t offset;
+                       uint16_t wmode;
+                       uint16_t remaining;
+                       uint32_t count;
                        const char *data;
                } in;
                struct {
-                       uint32 nwritten;
-                       uint16 remaining;
+                       uint32_t nwritten;
+                       uint16_t remaining;
                } out;
        } writex;
 
        /* SMBwriteclose interface */
        struct {
-               enum write_level level;
+               enum smb_write_level level;
 
                struct {
-                       uint16 fnum;
-                       uint16 count;
-                       uint32 offset;
+                       uint16_t fnum;
+                       uint16_t count;
+                       uint32_t offset;
                        time_t mtime;
                        const char *data;
                } in;
                struct {
-                       uint16 nwritten;
+                       uint16_t nwritten;
                } out;
        } writeclose;
 
        /* SMBsplwrite interface */
        struct {
-               enum write_level level;
+               enum smb_write_level level;
 
                struct {
-                       uint16 fnum;
-                       uint16 count;
+                       uint16_t fnum;
+                       uint16_t count;
                        const char *data;
                } in;
        } splwrite;
 };
 
 
-enum lock_level {RAW_LOCK_GENERIC, RAW_LOCK_LOCK, RAW_LOCK_UNLOCK, RAW_LOCK_LOCKX};
+enum smb_lock_level {RAW_LOCK_GENERIC, RAW_LOCK_LOCK, RAW_LOCK_UNLOCK, RAW_LOCK_LOCKX};
 
 /* union for lock() backend call 
 */
 union smb_lock {
        /* generic interface */
        struct {
-               enum lock_level level;
+               enum smb_lock_level level;
 
-               struct {
-
-               } in;
        } generic;
 
        /* SMBlock interface */
        struct {
-               enum lock_level level;
+               enum smb_lock_level level;
 
                struct {
-                       uint16 fnum;
-                       uint32 count;
-                       uint32 offset;
+                       uint16_t fnum;
+                       uint32_t count;
+                       uint32_t offset;
                } in;
        } lock;
 
        /* SMBunlock interface */
        struct {
-               enum lock_level level;
+               enum smb_lock_level level;
 
                struct {
-                       uint16 fnum;
-                       uint32 count;
-                       uint32 offset;
+                       uint16_t fnum;
+                       uint32_t count;
+                       uint32_t offset;
                } in;
        } unlock;
 
        /* SMBlockingX interface */
        struct {
-               enum lock_level level;
+               enum smb_lock_level level;
 
                struct {
-                       uint16 fnum;
-                       uint16 mode;
-                       uint32 timeout;
-                       uint16 ulock_cnt;
-                       uint16 lock_cnt;
+                       uint16_t fnum;
+                       uint16_t mode;
+                       uint32_t timeout;
+                       uint16_t ulock_cnt;
+                       uint16_t lock_cnt;
                        struct smb_lock_entry {
-                               uint16 pid;
-                               SMB_BIG_UINT offset;
-                               SMB_BIG_UINT count;
+                               uint16_t pid;
+                               uint64_t offset;
+                               uint64_t count;
                        } *locks; /* unlocks are first in the arrray */
                } in;
        } lockx;
 };
 
 
-enum close_enum {RAW_CLOSE_GENERIC, RAW_CLOSE_CLOSE, RAW_CLOSE_SPLCLOSE};
+enum smb_close_level {RAW_CLOSE_GENERIC, RAW_CLOSE_CLOSE, RAW_CLOSE_SPLCLOSE};
 
 /*
   union for close() backend call
@@ -1483,35 +1503,35 @@ enum close_enum {RAW_CLOSE_GENERIC, RAW_CLOSE_CLOSE, RAW_CLOSE_SPLCLOSE};
 union smb_close {
        /* generic interface */
        struct {
-               enum close_enum level;
+               enum smb_close_level level;
 
                struct {
-                       uint16 fnum;
+                       uint16_t fnum;
                } in;
        } generic;
 
        /* SMBclose interface */
        struct {
-               enum close_enum level;
+               enum smb_close_level level;
 
                struct {
-                       uint16 fnum;
+                       uint16_t fnum;
                        time_t write_time;
                } in;
        } close;
 
        /* SMBsplclose interface - empty! */
        struct {
-               enum close_enum level;
+               enum smb_close_level level;
 
                struct {
-                       uint16 fnum;
+                       uint16_t fnum;
                } in;
        } splclose;
 };
 
 
-enum lpq_level {RAW_LPQ_GENERIC, RAW_LPQ_RETQ};
+enum smb_lpq_level {RAW_LPQ_GENERIC, RAW_LPQ_RETQ};
 
 /*
   union for lpq() backend
@@ -1519,49 +1539,77 @@ enum lpq_level {RAW_LPQ_GENERIC, RAW_LPQ_RETQ};
 union smb_lpq {
        /* generic interface */
        struct {
-               enum lpq_level level;
+               enum smb_lpq_level level;
 
        } generic;
 
 
        /* SMBsplretq interface */
        struct {
-               enum lpq_level level;
+               enum smb_lpq_level level;
 
                struct {
-                       uint16 maxcount;
-                       uint16 startidx;
+                       uint16_t maxcount;
+                       uint16_t startidx;
                } in;
                struct {
-                       uint16 count;
-                       uint16 restart_idx;
+                       uint16_t count;
+                       uint16_t restart_idx;
                        struct {
                                time_t time;
-                               uint8 status;
-                               uint16 job;
-                               uint32 size;
+                               uint8_t status;
+                               uint16_t job;
+                               uint32_t size;
                                char *user;
                        } *queue;
                } out;
        } retq;
 };
 
+enum smb_ioctl_level {RAW_IOCTL_IOCTL, RAW_IOCTL_NTIOCTL};
 
-/* struct for SMBioctl */
-struct smb_ioctl {
+/*
+  union for ioctl() backend
+*/
+union smb_ioctl {
+       /* generic interface */
        struct {
-               uint16 fnum;
-               uint32 request;
-       } in;
+               enum smb_ioctl_level level;
+
+       } generic;
+
+       /* struct for SMBioctl */
        struct {
-               DATA_BLOB blob;
-       } out;
+               enum smb_ioctl_level level;
+               struct {
+                       uint16_t fnum;
+                       uint32_t request;
+               } in;
+               struct {
+                       DATA_BLOB blob;
+               } out;
+       } ioctl;
+
+
+       /* struct for NT ioctl call */
+       struct {
+               enum smb_ioctl_level level;
+               struct {
+                       uint32_t function;
+                       uint16_t fnum;
+                       BOOL fsctl;
+                       uint8_t filter;
+               } in;
+               struct {
+                       DATA_BLOB blob;
+               } out;
+       } ntioctl;
 };
 
 /* struct for SMBflush */
 struct smb_flush {
        struct {
-               uint16 fnum;
+               uint16_t fnum;
        } in;
 };
 
@@ -1569,35 +1617,36 @@ struct smb_flush {
 /* struct for SMBcopy */
 struct smb_copy {
        struct {
-               uint16 tid2;
-               uint16 ofun;
-               uint16 flags;
+               uint16_t tid2;
+               uint16_t ofun;
+               uint16_t flags;
                const char *path1;
                const char *path2;
        } in;
        struct {
-               uint16 count;
+               uint16_t count;
        } out;
 };
 
 
-/* struct for transact2 call */
+/* struct for transact/transact2 call */
 struct smb_trans2 {
        struct {
-               uint16 max_param;
-               uint16 max_data;
-               uint8  max_setup;
-               uint16 flags;
-               uint32 timeout;
-               uint8  setup_count;
-               uint16 *setup;
+               uint16_t max_param;
+               uint16_t max_data;
+               uint8_t  max_setup;
+               uint16_t flags;
+               uint32_t timeout;
+               uint8_t  setup_count;
+               uint16_t *setup;
+               const char *trans_name; /* SMBtrans only */
                DATA_BLOB params;
                DATA_BLOB data;
        } in;
 
        struct {
-               uint8  setup_count;
-               uint16 *setup;
+               uint8_t  setup_count;
+               uint16_t *setup;
                DATA_BLOB params;
                DATA_BLOB data;
        } out;
@@ -1606,19 +1655,19 @@ struct smb_trans2 {
 /* struct for nttransact2 call */
 struct smb_nttrans {
        struct {
-               uint8  max_setup;
-               uint32 max_param;
-               uint32 max_data;
-               uint32 setup_count;
-               uint16 function;
-               uint16 *setup;
+               uint8_t  max_setup;
+               uint32_t max_param;
+               uint32_t max_data;
+               uint32_t setup_count;
+               uint16_t function;
+               uint16_t *setup;
                DATA_BLOB params;
                DATA_BLOB data;
        } in;
 
        struct {
-               uint8  setup_count;
-               uint16 *setup;
+               uint8_t  setup_count;
+               uint16_t *setup;
                DATA_BLOB params;
                DATA_BLOB data;
        } out;
@@ -1628,80 +1677,73 @@ struct smb_nttrans {
 /* struct for nttrans change notify call */
 struct smb_notify {
        struct {
-               uint32 buffer_size;
-               uint32 completion_filter;
-               uint16 fnum;
+               uint32_t buffer_size;
+               uint32_t completion_filter;
+               uint16_t fnum;
                BOOL recursive;
        } in;
 
        struct {
-               uint32 num_changes;
+               uint32_t num_changes;
                struct {
-                       uint32 action;
+                       uint32_t action;
                        WIRE_STRING name;
                } *changes;
        } out;
 };
 
-/* struct for NT ioctl call */
-struct smb_ntioctl {
-       struct {
-               uint32 function;
-               uint16 fnum;
-               BOOL fsctl;
-               uint8 filter;
-       } in;
-};
-
 
-enum search_level {RAW_SEARCH_GENERIC                 = 0xF000, 
-                  RAW_SEARCH_SEARCH,                 /* SMBsearch */ 
-                  RAW_SEARCH_STANDARD                = SMB_FIND_STANDARD,
-                  RAW_SEARCH_EA_SIZE                 = SMB_FIND_EA_SIZE,
-                  RAW_SEARCH_DIRECTORY_INFO          = SMB_FIND_DIRECTORY_INFO,
-                  RAW_SEARCH_FULL_DIRECTORY_INFO     = SMB_FIND_FULL_DIRECTORY_INFO,
-                  RAW_SEARCH_NAME_INFO               = SMB_FIND_NAME_INFO,
-                  RAW_SEARCH_BOTH_DIRECTORY_INFO     = SMB_FIND_BOTH_DIRECTORY_INFO,
-                  RAW_SEARCH_261                     = SMB_FIND_261,
-                  RAW_SEARCH_262                     = SMB_FIND_262,
-                  RAW_SEARCH_UNIX_INFO               = SMB_FIND_UNIX_INFO};
+enum smb_search_level {RAW_SEARCH_GENERIC                 = 0xF000, 
+                      RAW_SEARCH_SEARCH,                 /* SMBsearch */ 
+                      RAW_SEARCH_FFIRST,                 /* SMBffirst */ 
+                      RAW_SEARCH_FUNIQUE,                /* SMBfunique */ 
+                      RAW_SEARCH_STANDARD                = SMB_FIND_STANDARD,
+                      RAW_SEARCH_EA_SIZE                 = SMB_FIND_EA_SIZE,
+                      RAW_SEARCH_DIRECTORY_INFO          = SMB_FIND_DIRECTORY_INFO,
+                      RAW_SEARCH_FULL_DIRECTORY_INFO     = SMB_FIND_FULL_DIRECTORY_INFO,
+                      RAW_SEARCH_NAME_INFO               = SMB_FIND_NAME_INFO,
+                      RAW_SEARCH_BOTH_DIRECTORY_INFO     = SMB_FIND_BOTH_DIRECTORY_INFO,
+                      RAW_SEARCH_ID_FULL_DIRECTORY_INFO  = SMB_FIND_ID_FULL_DIRECTORY_INFO,
+                      RAW_SEARCH_ID_BOTH_DIRECTORY_INFO  = SMB_FIND_ID_BOTH_DIRECTORY_INFO,
+                      RAW_SEARCH_UNIX_INFO               = SMB_FIND_UNIX_INFO};
 
        
 /* union for file search */
 union smb_search_first {
        struct {
-               enum search_level level;
+               enum smb_search_level level;
        } generic;
        
-       /* search (old) findfirst interface */
+       /* search (old) findfirst interface. 
+          Also used for ffirst and funique. */
        struct {
-               enum search_level level;
+               enum smb_search_level level;
        
                struct {
-                       uint16 max_count;
-                       uint16 search_attrib;
+                       uint16_t max_count;
+                       uint16_t search_attrib;
                        const char *pattern;
                } in;
                struct {
-                       int16 count;
+                       int16_t count;
                } out;
        } search_first;
 
        /* trans2 findfirst interface */
        struct {
-               enum search_level level;
+               enum smb_search_level level;
                
                struct {
-                       uint16 search_attrib;
-                       uint16 max_count;
-                       uint16 flags;
-                       uint32 storage_type;
+                       uint16_t search_attrib;
+                       uint16_t max_count;
+                       uint16_t flags;
+                       uint32_t storage_type;
                        const char *pattern;
                } in;
                struct {
-                       uint16 handle;
-                       uint16 count;
-                       uint16 end_of_search;
+                       uint16_t handle;
+                       uint16_t count;
+                       uint16_t end_of_search;
                } out;
        } t2ffirst;
 };
@@ -1709,37 +1751,44 @@ union smb_search_first {
 /* union for file search continue */
 union smb_search_next {
        struct {
-               enum search_level level;
+               enum smb_search_level level;
        } generic;
 
-       /* search (old) findnext interface */
+       /* search (old) findnext interface. Also used
+          for ffirst when continuing */
        struct {
-               enum search_level level;
+               enum smb_search_level level;
        
                struct {
-                       uint16 max_count;
-                       uint16 search_attrib;
-                       DATA_BLOB search_id;
+                       uint16_t max_count;
+                       uint16_t search_attrib;
+                       struct smb_search_id {
+                               uint8_t reserved;
+                               char name[11];
+                               uint8_t handle;
+                               uint32_t server_cookie;
+                               uint32_t client_cookie;
+                       } id;
                } in;
                struct {
-                       uint16 count;
+                       uint16_t count;
                } out;
        } search_next;
        
        /* trans2 findnext interface */
        struct {
-               enum search_level level;
+               enum smb_search_level level;
                
                struct {
-                       uint16 handle;
-                       uint16 max_count;
-                       uint32 resume_key;
-                       uint16 flags;
+                       uint16_t handle;
+                       uint16_t max_count;
+                       uint32_t resume_key;
+                       uint16_t flags;
                        const char *last_name;
                } in;
                struct {
-                       uint16 count;
-                       uint16 end_of_search;
+                       uint16_t count;
+                       uint16_t end_of_search;
                } out;
        } t2fnext;
 };
@@ -1748,150 +1797,164 @@ union smb_search_next {
 union smb_search_data {
        /* search (old) findfirst */
        struct {
-               uint16 attrib;
+               uint16_t attrib;
                time_t write_time;
-               uint32 size;
-               DATA_BLOB search_id;  /* used to resume search from this point */
-               char *name;
+               uint32_t size;
+               struct smb_search_id id;
+               const char *name;
        } search;
        
        /* trans2 findfirst RAW_SEARCH_STANDARD level */
        struct {
-               uint32 resume_key;
+               uint32_t resume_key;
                time_t create_time;
                time_t access_time;
                time_t write_time;
-               uint32 size;
-               uint32 alloc_size;
-               uint16 attrib;
+               uint32_t size;
+               uint32_t alloc_size;
+               uint16_t attrib;
                WIRE_STRING name;
        } standard;
 
        /* trans2 findfirst RAW_SEARCH_EA_SIZE level */
        struct {
-               uint32 resume_key;
+               uint32_t resume_key;
                time_t create_time;
                time_t access_time;
                time_t write_time;
-               uint32 size;
-               uint32 alloc_size;
-               uint16 attrib;
-               uint32 ea_size;
+               uint32_t size;
+               uint32_t alloc_size;
+               uint16_t attrib;
+               uint32_t ea_size;
                WIRE_STRING name;
        } ea_size;
 
        /* RAW_SEARCH_DIRECTORY_INFO interface */
        struct {
-               uint32 file_index;
+               uint32_t file_index;
                NTTIME create_time;
                NTTIME access_time;
                NTTIME write_time;
                NTTIME change_time;
-               large_t  size;
-               large_t  alloc_size;
-               uint32   attrib;
+               uint64_t  size;
+               uint64_t  alloc_size;
+               uint32_t   attrib;
                WIRE_STRING name;
        } directory_info;
 
        /* RAW_SEARCH_FULL_DIRECTORY_INFO interface */
        struct {
-               uint32 file_index;
+               uint32_t file_index;
                NTTIME create_time;
                NTTIME access_time;
                NTTIME write_time;
                NTTIME change_time;
-               large_t  size;
-               large_t  alloc_size;
-               uint32   attrib;
-               uint32   ea_size;
+               uint64_t  size;
+               uint64_t  alloc_size;
+               uint32_t   attrib;
+               uint32_t   ea_size;
                WIRE_STRING name;
        } full_directory_info;
 
        /* RAW_SEARCH_NAME_INFO interface */
        struct {
-               uint32 file_index;
+               uint32_t file_index;
                WIRE_STRING name;
        } name_info;
 
        /* RAW_SEARCH_BOTH_DIRECTORY_INFO interface */
        struct {
-               uint32 file_index;
+               uint32_t file_index;
                NTTIME create_time;
                NTTIME access_time;
                NTTIME write_time;
                NTTIME change_time;
-               large_t  size;
-               large_t  alloc_size;
-               uint32   attrib;
-               uint32   ea_size;
+               uint64_t  size;
+               uint64_t  alloc_size;
+               uint32_t   attrib;
+               uint32_t   ea_size;
                WIRE_STRING short_name;
                WIRE_STRING name;
        } both_directory_info;
 
-       /* RAW_SEARCH_261 interface */
+       /* RAW_SEARCH_ID_FULL_DIRECTORY_INFO interface */
        struct {
-               uint32 file_index;
+               uint32_t file_index;
                NTTIME create_time;
                NTTIME access_time;
                NTTIME write_time;
                NTTIME change_time;
-               large_t size;
-               large_t alloc_size;
-               uint32 attrib;
-               uint32 ea_size;
-               uint32 unknown[3];
+               uint64_t size;
+               uint64_t alloc_size;
+               uint32_t attrib;
+               uint32_t ea_size;
+               uint64_t file_id;
                WIRE_STRING name;
-       } level_261;
+       } id_full_directory_info;
 
-       /* RAW_SEARCH_262 interface */
+       /* RAW_SEARCH_ID_BOTH_DIRECTORY_INFO interface */
        struct {
-               uint32 file_index;
+               uint32_t file_index;
                NTTIME create_time;
                NTTIME access_time;
                NTTIME write_time;
                NTTIME change_time;
-               large_t size;
-               large_t alloc_size;
-               uint32  attrib;
-               uint32  ea_size;
-               uint32  unknown[2];
+               uint64_t size;
+               uint64_t alloc_size;
+               uint32_t  attrib;
+               uint32_t  ea_size;
+               uint64_t file_id;
                WIRE_STRING short_name;
                WIRE_STRING name;
-       } level_262;
+       } id_both_directory_info;
 
        /* RAW_SEARCH_UNIX_INFO interface */
        struct {
-               large_t end_of_file;
-               large_t num_bytes;
+               uint32_t file_index;
+               uint64_t size;
+               uint64_t alloc_size;
                NTTIME status_change_time;
                NTTIME access_time;
                NTTIME change_time;
-               large_t uid;
-               large_t gid;
-               uint32 file_type;
-               large_t dev_major;
-               large_t dev_minor;
-               large_t unique_id;
-               large_t permissions;
-               large_t nlink;          
+               uint64_t uid;
+               uint64_t gid;
+               uint32_t file_type;
+               uint64_t dev_major;
+               uint64_t dev_minor;
+               uint64_t unique_id;
+               uint64_t permissions;
+               uint64_t nlink;         
+               const char *name;
        } unix_info;
 };
 
 
-enum search_close_level {RAW_FINDCLOSE_GENERIC, RAW_FINDCLOSE_CLOSE};
+enum smb_search_close_level {RAW_FINDCLOSE_GENERIC, RAW_FINDCLOSE_FCLOSE, RAW_FINDCLOSE_FINDCLOSE};
 
 /* union for file search close */
 union smb_search_close {
        struct {
-               enum search_close_level level;
+               enum smb_search_close_level level;
        } generic;
 
+       /* SMBfclose (old search) interface */
+       struct {
+               enum smb_search_close_level level;
+       
+               struct {
+                       /* max_count and search_attrib are not used, but are present */
+                       uint16_t max_count;
+                       uint16_t search_attrib;
+                       struct smb_search_id id;
+               } in;
+       } fclose;
+       
        /* SMBfindclose interface */
        struct {
-               enum search_level level;
+               enum smb_search_close_level level;
                
                struct {
-                       uint16 handle;
+                       uint16_t handle;
                } in;
        } findclose;
 };