A Common Internet File System (CIFS/1.0) Protocol

Preliminary Draft

Network Working Group
Internet-Draft
Paul J. Leach, Microsoft
Dilip C. Naik, Microsoft

December 19, 1997
Expires June 19, 1998

Status of this Memo

This document is an Internet-Draft. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or made obsolete by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

To learn the current status of any Internet-Draft, please check the "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe), munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or ftp.isi.edu (US West Coast).

Distribution of this document is unlimited. Please send comments to the authors at cifs@microsoft.com. Discussion of CIFS is on the mailing list CIFS@DISCUSS.MICROSOFT.COM; subscribe by sending a message to ListServ@CIFS@DISCUSS.MICROSOFT.COM with a body of "subscribe CIFS you@your.domain." The mailing list archives are at http://discuss.microsoft.com/archives/cifs.html. The CIFS home page is found at http://msdn.microsoft.com/msdn-online/workshop/networking/cifs/default.asp.

Summary: This document describes the Common Internet File System (CIFS) file-sharing protocol, version 1.0. Client systems use this protocol to request file and print services from server systems over a network. It is based on the Server Message Block (SMB) protocol widely in use by personal computers and workstations running a wide variety of operating systems. (109 printed pages)

1.0 Introduction
   1.1 Summary of Features
      1.1.1 File Access
      1.1.2 File and Record Locking
      1.1.3 Safe Caching, Read-Ahead, and Write-Behind
      1.1.4 File Change Notification
      1.1.5 Protocol Version Negotiation
      1.1.6 Extended Attributes
      1.1.7 Distributed Replicated Virtual Volumes
      1.1.8 Server Name Resolution Independence
      1.1.9 Batched Requests

2.0 Protocol Operation Overview
   2.1 Server Name Determination
   2.2 Server Name Resolution
   2.3 Sample Message Flow
   2.4 CIFS Protocol Dialect Negotiation
   2.5 Message Transport
      2.5.1 Connection Management
   2.6 Opportunistic Locks
      2.6.1 Exclusive Oplocks
      2.6.2 Batch Oplocks
      2.6.3 Level II Oplocks
   2.7 Security Model
   2.8 Authentication
   2.9 Distributed File System (Dfs) Support

3.0 SMB Message Formats and Data Types
   3.1 Notation
   3.2 SMB Header
      3.2.1 Flags Field
      3.2.2 Flags2 Field
      3.2.3 Tid Field
      3.2.4 Pid Field
      3.2.5 Uid Field
      3.2.6 Mid Field
      3.2.7 Status Field
      3.2.8 Timeouts
      3.2.9 Data Buffer (BUFFER) and String Formats
   3.3 File Names
   3.4 Wildcards
   3.5 Dfs Pathnames
   3.6 Time and Date Encoding
   3.7 Access Mode Encoding
   3.8 Access Mask Encoding
   3.9 Open Function Encoding
   3.10 Open Action Encoding
   3.11 File Attribute Encoding
   3.12 Extended File Attribute Encoding
   3.13 Batching Requests ("AndX" Messages)
   3.14 "Transaction" Style Subprotocols
      3.14.1 SMB_COM_TRANSACTION2 Format
      3.14.2 The 3.13.2 SMB_COM_NT_TRANSACTION formats
      3.14.3 Functional Description
   3.15 Valid SMB Requests By Negotiated Dialect

4.0 SMB Requests
   4.1 Session Requests
      4.1.1 NEGOTIATE: Negotiate Protocol
      4.1.2 SESSION_SETUP_ANDX: Session Setup
      4.1.3 LOGOFF_ANDX: User Logoff
      4.1.4 TREE_CONNECT_ANDX: Tree Connect
      4.1.5 TREE_DISCONNECT: Tree Disconnect
      4.1.6 TRANS2_QUERY_FS_INFORMATION: Get File System Information
      4.1.7 ECHO: Ping The Server
      4.1.8 NT_CANCEL: Cancel Request
   4.2 File Requests
      4.2.1 NT_CREATE_ANDX: Create or Open File
      4.2.2 NT_TRANSACT_CREATE: Create or Open File With EAs or SD
      4.2.3 CREATE_TEMPORARY: Create Temporary File
      4.2.4 READ_ANDX: Read Bytes
      4.2.5 WRITE_ANDX: Write Bytes To File or Resource
      4.2.6 LOCKING_ANDX: Lock or Unlock Byte Ranges
      4.2.7 SEEK: Seek in File
      4.2.8 FLUSH: Flush File
      4.2.9 CLOSE: Close File
      4.2.10 DELETE: Delete File
      4.2.11 RENAME: Rename File
      4.2.12 MOVE: Rename File
      4.2.13 COPY: Copy File
      4.2.14 TRANS2_QUERY_PATH_INFORMATION: Get File Attributes Given Path
      4.2.15 TRANS2_QUERY_FILE_INFORMATION: Get File Attributes Given FID
      4.2.16 TRANS2_SET_PATH_INFORMATION: Set File Attributes Given Path
      4.2.17 TRANS2_SET_FILE_INFORMATION: Set File Attributes Given FID
   4.3 Directory Requests
      4.3.1 TRANS2_CREATE_DIRECTORY: Create Directory (with optional EAs)
      4.3.2 DELETE_DIRECTORY: Delete Directory
      4.3.3 CHECK_DIRECTORY: Check Directory
      4.3.4 TRANS2_FIND_FIRST2: Search Directory Using Wildcards
      4.3.5 TRANS2_FIND_NEXT2: Resume Directory Search Using Wildcards
      4.3.6 FIND_CLOSE2: Close Directory Search
      4.3.7 NT_TRANSACT_NOTIFY_CHANGE: Request Change Notification
   4.4 Dfs Operations
      4.4.1 TRANS2_GET_DFS_REFERRAL: Retrieve Distributed File System Referral
      4.4.2 TRANS2_REPORT_DFS_INCONSISTENCY: Inform A Server About Dfs Error
   4.5 Miscellaneous Operations
      4.5.1 NT_TRANSACT_IOCTL
      4.5.2 NT_TRANSACT_QUERY_SECURITY_DESC
      4.5.3 NT_TRANSACT_SET_SECURITY_DESC

5.0 SMB Symbolic Constants
   5.1 SMB Command Codes
   5.2 SMB_COM_TRANSACTION2 Subcommand Codes
   5.3 SMB_COM_NT_TRANSACTION Subcommand Codes
   5.4 SMB Protocol Dialect Constants

6.0 Error Codes and Classes

7.0 Legal Notice

8.0 References

9.0 Author Addresses

10.0 Appendix A—NETBIOS Transport over TCP
   10.1 Connection Establishment
      10.1.1 Backwards Compatibility
   10.2 Server-Side Connection Procedures

11.0 Appendix B—TCP Transport

12.0 Appendix C—Share Level Server Security