proposed new UNIX info level

James Peach jpeach at
Wed Feb 7 06:14:31 GMT 2007

Hi all,

This is a proposal for an extended SMB_QUERY_FILE_UNIX_BASIC info
level. The primary motivation for this is to provide an info level
that contains the BSD-style file flags and the file create time
(birth time).

The new info level is

     SMB_QUERY_FILE_UNIX_INFO2 0x20b /* info level */

     This is can be requested for QueryFileInfo, QueryPathInfo
     FindFirst, FindNext and PosixOpen, etc. Basically, anywhere you
     can ask for an info level :)

     For the FindFirst/FindNext, we should allocate a secondary info
     level to return the same data, SMB_FIND_FILE_UNIX2, if we want
     to be consistent with SMB_FIND_FILE_UNIX.

     The reply data block is:

         Size    Offset  Value
         0      LARGE_INTEGER EndOfFile  File size
         8      LARGE_INTEGER Blocks     Number of blocks used on disk
         16     LARGE_INTEGER ChangeTime               Attribute  
change time
         24     LARGE_INTEGER LastAccessTime           Last access time
         32     LARGE_INTEGER LastModificationTime     Last  
modification time
         40     LARGE_INTEGER Uid        Numeric user id for the owner
         48     LARGE_INTEGER Gid        Numeric group id of owner
         56     ULONG Type               Enumeration specifying the  
file type
         60     LARGE_INTEGER devmajor   Major device number if type  
is device
         68     LARGE_INTEGER devminor   Minor device number if type  
is device
         76     LARGE_INTEGER uniqueid   This is a server-assigned  
unique id
         84     LARGE_INTEGER permissions  	      Standard UNIX  
         92     LARGE_INTEGER nlinks     Number of hard link)
         100    LARGE_INTEGER CreationTime             Create/birth time
         108    ULONG FileFlags          File flags enumeration
         112    ULONG FileFlagsMask      Mask of valid flags

     Note that this is simply the SMB_QUERY_FILE_UNIX_BASIC reply
     with a few fields tacked on the end. All the fields except the
     last 3 inherit their semantics from SMB_QUERY_FILE_UNIX_BASIC.

The BSD-style file flags.

     These are needed to support UI tools that can modify their
     behaviour appropriately for the flags. The mose useful flag
     will probably be the HIDDEN flag, but I imagine that people
     with particular I/O requirements will find the others useful
     as well.

     The list of flags is derived from the current Linux CIFS client
     headers. I have removed those flags that seemed very specific
     to the current EXT3 implementation, and renumbered the remainded
     to be sequential. I'm expecting some feedback on this :)

     Note that these flags do not preserve the BSD concept of versions
     that are settable by users and versions that are only settable
     by superuser. The correct behaviour on GET will be to report
     the union of the user and superuser flags. The correct behaviour
     on SET will be to set only the user flag.

     EXT_SECURE_DELETE       0x00000001 /* file should be deleted  
securely */
     EXT_ENABLE_UNDELETE     0x00000002 /* file is an undelete  
candidate */
     EXT_SYNCHRONOUS         0x00000004 /* use synchronous I/O */
     EXT_IMMUTABLE           0x00000008 /* file is immutable */
     EXT_OPEN_APPEND_ONLY    0x00000010 /* file is append-only */
     EXT_DO_NOT_BACKUP       0x00000020 /* file should not be backed  
up */
     EXT_NO_UPDATE_ATIME     0x00000040 /* don't update the atime */
     EXT_HIDDEN              0x00000080 /* don't show this file in UI */

File create (birth) time.

     This is the BSD st_birthtime field, serialised as an NTTIME
     structure in the same way as the other timestamps already present

James Peach | jpeach at

More information about the samba-technical mailing list