You are previewing Implementing CIFS: The Common Internet File System.
O'Reilly logo
Implementing CIFS: The Common Internet File System

Book Description

"The book that Microsoft should have written, but didn't."
—Jeremy Allison, Samba Team

"Your detailed explanations are clear and backed-up with source code—and the numerous bits of humor make a dry subject very enjoyable to read."
—J.D. Lindemann, network engineer, Adaptec, Inc.

The first developer's guide to Microsoft®'s Internet/Intranet file sharing standard

For years, developers and administrators have struggled to understand CIFS, Microsoft's poorly documented standard for Internet file sharing. Finally, there is an authoritative, cross-platform guide to CIFS capabilities and behavior. Implementing CIFS not only delivers the priceless knowledge of a Samba Team member dedicated to investigating the inner workings of CIFS, it also identifies and describes crucial specifications and supporting documents.

  • Provides essential information for designing and debugging large Windows® and/or Samba networks

  • Offers clear, in-depth introductions to Server Message Block (SMB), NetBIOS over TCP/IP (NBT), browser services, and authentication

  • Drills down into the internals of CIFS, exposing its behavior on the wire and at the desktop—and its strange quirks

  • Presents illustrative code examples throughout

  • Reflects years of work reviewing obscure documentation, packet traces, and sourcecode

  • Includes the SNIA CIFS Technical Reference

Implementing CIFS will be indispensable to every developer who wants to provide CIFS compatibility—and every administrator or security specialist who needs an in-depth understanding of how it really works.

Table of Contents

  1. Copyright
    1. Dedication
  2. Praise for Implementing CIFS
  3. Bruce Perens’ Open Source Series
  4. About Prentice Hall Professional Technical Reference
  5. About the Cover Art
  6. Foreword
  7. Introduction: CIFS from Eight Miles High
    1. 0.1. First Impressions
    2. 0.2. What is CIFS?
      1. 0.2.1. A Recipe for Protocol Soup
    3. 0.3. The CIFS Community
      1. 0.3.1. Visiting the Network Neighborhood
      2. 0.3.2. Community Collaborations
    4. 0.4. Audience
    5. 0.5. Scope
    6. 0.6. Acknowledgements and Thanks
      1. 0.6.1. The Book
    7. 0.7. About the Author
      1. 0.7.1. Quick Story
    8. 0.8. License
  8. I. NBT: NetBIOS over TCP/IP
    1. 1. A Short Bio of NetBIOS
      1. 1.1. NetBIOS and DOS: The Early Years
    2. 2. Speaking NetBIOS
      1. 2.1. Emulating “NetBIOS LANs”
        1. 2.1.1. The NetBIOS Name Service
        2. 2.1.2. The NetBIOS Datagram Service
        3. 2.1.3. The NetBIOS Session Service
      2. 2.2. Scope: The Final Frontier
      3. 2.3. Thus Endeth the Overview
    3. 3. The Basics of NBT Implementation
      1. 3.1. You Got the Name, Look Up the Number
        1. 3.1.1. Encoding NetBIOS Names
        2. 3.1.2. Fully Qualified NBT Names
        3. 3.1.3. Second Level Encoding
        4. 3.1.4. Name Service Packet Headers
        5. 3.1.5. The Query Entry
        6. 3.1.6. Some Trouble Ahead
        7. 3.1.7. Finally! A Simple Broadcast Name Query
      2. 3.2. Interlude
    4. 4. The Name Service in Detail
      1. 4.1. NBT Names: Once More with Feeling
        1. 4.1.1. Valid NetBIOS Name Characters
        2. 4.1.2. NetBIOS Names within Scope
        3. 4.1.3. Encoding and Decoding NBT Names
      2. 4.2. NBT Name Service Packets
        1. 4.2.1. Name Service Headers
        2. 4.2.2. Name Service Question Records
        3. 4.2.3. Name Service Resource Records
      3. 4.3. Conversations with the Name Service
        1. 4.3.1. Name Registration
          1. 4.3.1.1. Broadcast Name Registration
          2. 4.3.1.2. Unicast (NBNS) Name Registration
          3. 4.3.1.3. M and H Node Name Registration
          4. 4.3.1.4. Registering Multi-Homed Hosts
        2. 4.3.2. Name Query
          1. 4.3.2.1. Negative Query Response
          2. 4.3.2.2. Positive Query Response
          3. 4.3.2.3. The Redirect Name Query Response
          4. 4.3.2.4. A Simple Name Query Revisited
        3. 4.3.3. Name Refresh
        4. 4.3.4. Name Release
          1. 4.3.4.1. Name Release Response
        5. 4.3.5. Node Status
          1. 4.3.5.1. Node Status Response
        6. 4.3.6. Name Conflict Demand
          1. 4.3.6.1. Name Release Demand Revisited
      4. 4.4. Enough Already
    5. 5. The Datagram Service in Detail
      1. 5.1. Datagram Distribution over Routed IP Internetworks
      2. 5.2. The NBDD and the Damage Done
      3. 5.3. Implementing a Workable Datagram Service
        1. 5.3.1. Fragmenting Datagrams
        2. 5.3.2. Receiving Datagrams
        3. 5.3.3. Querying the NBDD
        4. 5.3.4. The Second Least Well Understood Aspect of NBT
    6. 6. The Session Service in Detail
      1. 6.1. Session Service Header
      2. 6.2. Creating an NBT Session
      3. 6.3. Maintaining an NBT Session
      4. 6.4. Closing an NBT Session
    7. 7. Where It All Went Wrong
      1. 7.1. The 0x1Dirty Little Secret
      2. 7.2. Twenty-five IPs or Less
      3. 7.3. Special Handling Required for 0x1B Names
      4. 7.4. Alternate Name Resolution
      5. 7.5. The Awful Truth
  9. II. SMB: The Server Message Block Protocol
    1. 8. A Little Background on SMB
      1. 8.1. Getting Started
      2. 8.2. NBT or Not NBT
    2. 9. An Introductory Tour of SMB
      1. 9.1. The Server Identifier
      2. 9.2. The Directory Path
      3. 9.3. The File
      4. 9.4. The SMB URL
      5. 9.5. Was That Trip Really Necessary?
    3. 10. First Contact: Reaching the Server
      1. 10.1. Interpreting the Server Identifier
      2. 10.2. The Destination Port
      3. 10.3. Transport Discovery
        1. 10.3.1. Run Naked
        2. 10.3.2. Using the NetBIOS Name
        3. 10.3.3. Reverse Mapping a NetBIOS Name
      4. 10.4. Connecting to the Server
    4. 11. SMB in Its Natural Habitat
      1. 11.1. Our Very First Live SMBs
      2. 11.2. SMB Message Structure
        1. 11.2.1. SMB Message Header
        2. 11.2.2. SMB Message Parameters
        3. 11.2.3. SMB Message Data
      3. 11.3. Case in Point: NEGOTIATE PROTOCOL
      4. 11.4. The AndX Mutation
      5. 11.5. The Flow of Conversation
      6. 11.6. A Little More Code
      7. 11.7. Take a Break
    5. 12. The SMB Header in Detail
      1. 12.1. The SMB_HEADER.STATUS Field Exposed
      2. 12.2. The FLAGS and FLAGS2 Fields Tell All
      3. 12.3. EXTRA! EXTRA! Read All About It!
      4. 12.4. TID and UID: Separated at Birth?
      5. 12.5. PID and MID Revealed
        1. 12.5.1. EXTRA.PidHigh Dark Secrets Uncovered
      6. 12.6. SMB Header Final Report
    6. 13. Protocol Negotiation
      1. 13.1. A Smattering of SMB Dialects
      2. 13.2. Greetings: The NEGOTIATE PROTOCOL REQUEST
      3. 13.3. Gesundheit: The NEGOTIATE PROTOCOL RESPONSE
        1. 13.3.1. NegProt Response Parameters
        2. 13.3.2. NegProt Response Data
      4. 13.4. Are We There Yet?
    7. 14. Session Setup
      1. 14.1. SESSION SETUP ANDX REQUEST Parameters
        1. 14.1.1. Virtual Circuits
        2. 14.1.2. Capabilities Bits
      2. 14.2. SESSION SETUP ANDX REQUEST Data
      3. 14.3. The SESSION SETUP ANDX RESPONSE SMB
    8. 15. Authentication
      1. 15.1. Anonymous and Guest Login
      2. 15.2. Plaintext Passwords
        1. 15.2.1. User Level Security with Plaintext Passwords
        2. 15.2.2. Share Level Security with Plaintext Passwords
      3. 15.3. LM Challenge/Response
        1. 15.3.1. DES
        2. 15.3.2. Creating the Challenge
        3. 15.3.3. Creating the LM Hash
        4. 15.3.4. Creating the LM Response
        5. 15.3.5. LM Challenge/Response: Once More with Feeling
      4. 15.4. NTLM Challenge/Response
      5. 15.5. NTLM Version 2
        1. 15.5.1. The NTLMv2 Toolbox
        2. 15.5.2. The NTLMv2 Password Hash
        3. 15.5.3. The NTLMv2 Response
        4. 15.5.4. Creating the Blob
        5. 15.5.5. Improved Security Through Confusion
        6. 15.5.6. Insult to Injury: LMv2
        7. 15.5.7. Choosing NTLMv2
      6. 15.6. Extended Security: That Light at the End of the Tunnel
        1. 15.6.1. The Extended Security Authentication Toolkit
      7. 15.7. Kerberos
      8. 15.8. Random Notes on W2K and NT Domain Authentication
        1. 15.8.1. A Quick Look at W2K Domains
        2. 15.8.2. A Few Notes about NT Domains
        3. 15.8.3. It’s Good to Have a Backup
        4. 15.8.4. Trust Me on This
      9. 15.9. Random Notes on Message Authentication Codes
        1. 15.9.1. Generating the Session Key
        2. 15.9.2. Sequence Numbers
        3. 15.9.3. Calculating the MAC
        4. 15.9.4. Enabling and Requiring MAC Signing
      10. 15.10. Non Sequitur Time
      11. 15.11. Further Study
    9. 16. Building Your SMB Vocabulary
      1. 16.1. That TREE CONNECT Thingy
      2. 16.2. SMB Echo
      3. 16.3. Readin’, Writin’, and ’Rithmatic
      4. 16.4. Transaction SMBs
        1. 16.4.1. Mailslots and Named Pipes
    10. 17. The Remaining Oddities
      1. 17.1. Opportunistic Locks (OpLocks)
        1. 17.1.1. OpLock Breaks
      2. 17.2. Distributed File System (DFS)
      3. 17.3. DOS Attributes, Extended File Attributes, Long Filenames, and Suchlike
    11. 18. That Just about Wraps Things Up for SMB
  10. III. The Browse Service
    1. 19. A Beautiful Day in the Network Neighborhood
      1. 19.1. History: From Frontier Town to Bustling Metropolis
      2. 19.2. Sociology
      3. 19.3. Politics
        1. 19.3.1. When Is a Workgroup not a Workgroup?
        2. 19.3.2. Delegating Responsibility
    2. 20. Meet the Neighbors
      1. 20.1. Browse Service Clientele
        1. 20.1.1. Providers
        2. 20.1.2. Consumers
      2. 20.2. The Local Master Browser
      3. 20.3. Becoming a Backup Browser
      4. 20.4. Crossing the Street with the DMB
      5. 20.5. Elections
    3. 21. Infrastructure: The Mailslot and Named Pipe Abstractions
      1. 21.1. Meet the Plumbing: Named Pipes
      2. 21.2. The Mailslot Metaphor
    4. 22. The Talk on the Street
      1. 22.1. Making Sense of SMBtrans
      2. 22.2. Browse Service Mailslot Messages
        1. 22.2.1. Announcement Request
        2. 22.2.2. Host Announcement
        3. 22.2.3. Election Request
        4. 22.2.4. Get Backup List Request
        5. 22.2.5. Get Backup List Response
        6. 22.2.6. Local Master Announcement
        7. 22.2.7. Master Announcement
        8. 22.2.8. Domain Announcement
        9. 22.2.9. Become Backup Request
        10. 22.2.10. The Undocumented Reset
        11. 22.2.11. It’s All in the Delivery
      3. 22.3. RAPture
        1. 22.3.1. NetServerEnum2 Request
        2. 22.3.2. NetServerEnum2 Reply
        3. 22.3.3. On the Outskirts of Town
        4. 22.3.4. Transaction Fragmentation
        5. 22.3.5. RAP Annoyances
    5. 23. The Better Browser Bureau
      1. 23.1. Running an Election
        1. 23.1.1. Voting
        2. 23.1.2. The Ballot
      2. 23.2. Timing Is Everything
    6. 24. Samba Browse Service Enhancements
      1. 24.1. Automatic LANMAN
      2. 24.2. UnBrowsable
      3. 24.3. NBNS Wildcard DMB Queries and Enhanced Browsing
      4. 24.4. Remote Announce
      5. 24.5. Remote Browse Sync
      6. 24.6. DMB != PDC
    7. 25. It Can’t Happen Here
      1. 25.1. Misconfigured Hosts
      2. 25.2. Misconfigured Networks
      3. 25.3. Implementation Bugs
      4. 25.4. Troublemakers
      5. 25.5. Design Flaws
    8. 26. At Home in the Network Neighborhood
  11. IV. Appendices
    1. A. Making a Good Cup of Tea
      1. A.1. Basics of Making Tea
      2. A.2. About Tea
      3. A.3. Nasty Habits
      4. A.4. Decaffeinating Tea
    2. B. Known NetBIOS Suffix Values
      1. B.1. NetBIOS Name Suffix Bytes
      2. B.2. Special Handling of NetBIOS Names in WINS
    3. C. The SMB URL
      1. C.1. The Origins of the SMB URL
      2. C.2. Of Round Pegs, Square Holes, and Big Mallets
      3. C.3. Form Versus Function
      4. C.4. Additional Parts
      5. C.5. A Simple SMB URL Parser
    4. D. CIFS Technical Reference
      1. Abstract
      2. Intended Usage
        1. DISCLAIMER OF WARRANTIES AND REPRESENTATIONS
        2. LIMITATION OF LIABILITY
        3. INTELLECTUAL PROPERTY RIGHTS
        4. COPYRIGHT AND USAGE AGREEMENT
      3. Acknowledgements
      4. Table of Contents
      5. 1. Introduction
        1. 1.1. Summary of features
          1. 1.1.1. File access
          2. 1.1.2. File and record locking
          3. 1.1.3. Safe caching, read-ahead, and write-behind
          4. 1.1.4. File change notification
          5. 1.1.5. Protocol version negotiation
          6. 1.1.6. Extended attributes
          7. 1.1.7. Distributed replicated virtual volumes
          8. 1.1.8. Server name resolution independence
          9. 1.1.9. Batched requests
          10. 1.1.10. Obsolescence
      6. 2. Protocol Operation Overview
        1. 2.1. Server Name Determination
        2. 2.2. Server Name Resolution
        3. 2.3. Sample Message Flow
        4. 2.4. CIFS Protocol Dialect Negotiation
        5. 2.5. Message Transport
          1. 2.5.1. Connection Management
        6. 2.6. Opportunistic Locks
          1. 2.6.1. Oplock Types
            1. 2.6.1.1. Exclusive and Batch Oplocks
            2. 2.6.1.2. Level II Oplocks
          2. 2.6.2. Comparison with Other File Locking Methods
          3. 2.6.3. Oplock SMBs
            1. 2.6.3.1. Obtaining an Oplock
            2. 2.6.3.2. Releasing an Oplock
            3. 2.6.3.3. Revoking an Oplock
          4. 2.6.4. Other Issues
        7. 2.7. Security Model
        8. 2.8. Authentication
          1. 2.8.1. Overview
          2. 2.8.2. Base Algorithms
          3. 2.8.3. Authentication Algorithms
            1. 2.8.3.1. NT Session Key
            2. 2.8.3.2. LM Session Key
            3. 2.8.3.3. Response
            4. 2.8.3.4. MAC key
            5. 2.8.3.5. Message Authentication Code
          4. 2.8.4. Session Authentication Protocol
            1. 2.8.4.1. Plain Text Password
            2. 2.8.4.2. Challenge/Response
          5. 2.8.5. Message authentication code
          6. 2.8.6. Security Level
        9. 2.9. Distributed File System (DFS) Support
      7. 3. SMB Message Formats and Data Types
        1. 3.1. Notation
        2. 3.2. SMB header
          1. 3.2.1. Command field
          2. 3.2.2. Flags field
          3. 3.2.3. Flags2 Field
          4. 3.2.4. Tid Field
          5. 3.2.5. Pid Field
          6. 3.2.6. Uid Field
          7. 3.2.7. Mid Field
          8. 3.2.8. Status Field
          9. 3.2.9. Timeouts
          10. 3.2.10. Data Buffer (BUFFER) and String Formats
        3. 3.3. Name Restrictions
        4. 3.4. File Names
        5. 3.5. Wildcards
        6. 3.6. DFS Pathnames
        7. 3.7. Time And Date Encoding
        8. 3.8. Access Mode Encoding
        9. 3.9. Access Mask Encoding
        10. 3.10. Open Function Encoding
        11. 3.11. Open Action Encoding
        12. 3.12. File Attribute Encoding
        13. 3.13. Extended File Attribute Encoding
        14. 3.14. Batching Requests (“AndX” Messages)
        15. 3.15. “Transaction” Style Subprotocols
          1. 3.15.1. SMB_COM_TRANSACTION2 Format
          2. 3.15.2. SMB_COM_NT_TRANSACTION Formats
          3. 3.15.3. Functional Description
          4. 3.15.4. SMB_COM_TRANSACTION Operations
            1. 3.15.4.1. Mail Slot Transaction Protocol
            2. 3.15.4.2. Server Announcement Mailslot Transaction
            3. 3.15.4.3. Named Pipe Transaction Protocol
            4. 3.15.4.4. CallNamedPipe
            5. 3.15.4.5. WaitNamedPipe
            6. 3.15.4.6. PeekNamedPipe
            7. 3.15.4.7. GetNamedPipeHandleState
            8. 3.15.4.8. SetNamedPipeHandleState
            9. 3.15.4.9. GetNamedPipeInfo
            10. 3.15.4.10. TransactNamedPipe
            11. 3.15.4.11. RawReadNamedPipe
            12. 3.15.4.12. RawWriteNamedPipe
        16. 3.16. Valid SMB Requests by Negotiated Dialect
      8. 4. SMB Requests
        1. 4.1. Session Requests
          1. 4.1.1. NEGOTIATE: Negotiate Protocol
            1. 4.1.1.1. Errors
          2. 4.1.2. SESSION_SETUP_ANDX: Session Setup
            1. 4.1.2.1. Pre NT LM 0.12
            2. 4.1.2.2. NT LM 0.12
            3. 4.1.2.3. Errors
          3. 4.1.3. LOGOFF_ANDX: User Logoff
            1. 4.1.3.1. Errors
          4. 4.1.4. TREE_CONNECT_ANDX: Tree Connect
            1. 4.1.4.1. Errors
          5. 4.1.5. TREE_DISCONNECT: Tree Disconnect
            1. 4.1.5.1. Errors
          6. 4.1.6. TRANS2_QUERY_FS_INFORMATION: Get File System Information
            1. 4.1.6.1. SMB_INFO_ALLOCATION
            2. 4.1.6.2. SMB_INFO_VOLUME
            3. 4.1.6.3. SMB_QUERY_FS_VOLUME_INFO
            4. 4.1.6.4. SMB_QUERY_FS_SIZE_INFO
            5. 4.1.6.5. SMB_QUERY_FS_DEVICE_INFO
            6. 4.1.6.6. SMB_QUERY_FS_ATTRIBUTE_INFO
            7. 4.1.6.7. SMB_QUERY_CIFS_UNIX_INFO
            8. 4.1.6.8. SMB_QUERY_MAC_FS_INFO
            9. 4.1.6.9. Errors
          7. 4.1.7. ECHO: Ping the Server
            1. 4.1.7.1. Errors
          8. 4.1.8. NT_CANCEL: Cancel request
        2. 4.2. File Requests
          1. 4.2.1. NT_CREATE_ANDX: Create or Open File
            1. 4.2.1.1. Errors
          2. 4.2.2. NT_TRANSACT_CREATE: Create or Open File with EAs or SD
            1. 4.2.2.1. Errors
          3. 4.2.3. CREATE_TEMPORARY: Create Temporary File
            1. 4.2.3.1. Errors
          4. 4.2.4. READ_ANDX: Read Bytes
            1. 4.2.4.1. Errors
          5. 4.2.5. WRITE_ANDX: Write Bytes to file or resource
            1. 4.2.5.1. Errors
          6. 4.2.6. LOCKING_ANDX: Lock or Unlock Byte Ranges
            1. 4.2.6.1. Errors
          7. 4.2.7. SEEK: Seek in File
            1. 4.2.7.1. Errors
          8. 4.2.8. FLUSH: Flush File
            1. 4.2.8.1. Errors
          9. 4.2.9. CLOSE: Close File
            1. 4.2.9.1. Errors
          10. 4.2.10. CLOSE_AND_TREE_DISCONNECT
            1. 4.2.10.1. Errors
          11. 4.2.11. DELETE: Delete File
            1. 4.2.11.1. Errors
          12. 4.2.12. RENAME: Rename File
            1. 4.2.12.1. Errors
          13. 4.2.13. NT_RENAME:
            1. 4.2.13.1. Errors
          14. 4.2.14. MOVE: Rename File
            1. 4.2.14.1. Errors
          15. 4.2.15. COPY: Copy File
            1. 4.2.15.1. Errors
          16. 4.2.16. TRANS2_QUERY_PATH_INFORMATION: Get File Attributes Given Path
            1. 4.2.16.1. SMB_INFO_STANDARD & SMB_INFO_QUERY_EA_SIZE
            2. 4.2.16.2. SMB_INFO_QUERY_EAS_FROM_LIST & SMB_INFO_QUERY_ALL_EAS
            3. 4.2.16.3. SMB_INFO_IS_NAME_VALID
            4. 4.2.16.4. SMB_QUERY_FILE_BASIC_INFO
            5. 4.2.16.5. SMB_QUERY_FILE_STANDARD_INFO
            6. 4.2.16.6. SMB_QUERY_FILE_EA_INFO
            7. 4.2.16.7. SMB_QUERY_FILE_NAME_INFO
            8. 4.2.16.8. SMB_QUERY_FILE_ALL_INFO
            9. 4.2.16.9. SMB_QUERY_FILE_ALT_NAME_INFO
            10. 4.2.16.10. SMB_QUERY_FILE_STREAM_INFO
            11. 4.2.16.11. SMB_QUERY_FILE_COMPRESSION_INFO
            12. 4.2.16.12. SMB_QUERY_FILE_UNIX_BASIC
            13. 4.2.16.13. SMB_QUERY_FILE_UNIX_LINK
            14. 4.2.16.14. SMB_MAC_DT_GET_APPL
            15. 4.2.16.15. SMB_MAC_DT_GET_ICON
            16. 4.2.16.16. SMB_MAC_DT_GET_ICON_INFO
            17. 4.2.16.17. Errors
          17. 4.2.17. TRANS2_QUERY_FILE_INFORMATION: Get File Attributes Given FID
          18. 4.2.18. TRANS2_SET_PATH_INFORMATION: Set File Attributes given Path
            1. 4.2.18.1. SMB_INFO_STANDARD & SMB_INFO_QUERY_EA_SIZE
            2. 4.2.18.2. SMB_INFO_QUERY_ALL_EAS
            3. 4.2.18.3. SMB_SET_FILE_UNIX_BASIC
            4. 4.2.18.4. SMB_SET_FILE_UNIX_LINK
            5. 4.2.18.5. SMB_SET_FILE_UNIX_HLINK
            6. 4.2.18.6. SMB_MAC_SET_FINDER_INFO
            7. 4.2.18.7. SMB_MAC_DT_ADD_APPL
            8. 4.2.18.8. SMB_MAC_DT_REMOVE_APPL
            9. 4.2.18.9. SMB_MAC_DT_ADD_ICON
            10. 4.2.18.10. Errors
          19. 4.2.19. TRANS2_SET_FILE_INFORMATION: Set File Attributes Given FID
            1. 4.2.19.1. SMB_FILE_BASIC_INFO
            2. 4.2.19.2. SMB_FILE_DISPOSITION_INFO
            3. 4.2.19.3. SMB_FILE_ALLOCATION_INFO
            4. 4.2.19.4. SMB_FILE_END_OF_FILE_INFO
            5. 4.2.19.5. Errors
        3. 4.3. Directory Requests
          1. 4.3.1. TRANS2_CREATE_DIRECTORY: Create Directory (with optional EAs)
            1. 4.3.1.1. Errors
          2. 4.3.2. DELETE_DIRECTORY: Delete Directory
            1. 4.3.2.1. Errors
          3. 4.3.3. CHECK_DIRECTORY: Check Directory
            1. 4.3.3.1. Errors
          4. 4.3.4. TRANS2_FIND_FIRST2: Search Directory using Wildcards
            1. 4.3.4.1. SMB_INFO_STANDARD
            2. 4.3.4.2. SMB_INFO_QUERY_EA_SIZE
            3. 4.3.4.3. SMB_INFO_QUERY_EAS_FROM_LIST
            4. 4.3.4.4. SMB_FIND_FILE_DIRECTORY_INFO
            5. 4.3.4.5. SMB_FIND_FILE_FULL_DIRECTORY_INFO
            6. 4.3.4.6. SMB_FIND_FILE_BOTH_DIRECTORY_INFO
            7. 4.3.4.7. SMB_FIND_FILE_NAMES_INFO
            8. 4.3.4.8. SMB_FIND_FILE_UNIX
            9. 4.3.4.9. SMB_FINDBOTH_MAC_HFS_INFO
            10. 4.3.4.10. Errors
          5. 4.3.5. TRANS2_FIND_NEXT2: Resume Directory Search Using Wildcards
            1. 4.3.5.1. Errors
          6. 4.3.6. FIND_CLOSE2: Close Directory Search
            1. 4.3.6.1. Errors
          7. 4.3.7. NT_TRANSACT_NOTIFY_CHANGE: Request Change Notification
            1. 4.3.7.1. Errors
        4. 4.4. DFS Operations
          1. 4.4.1. TRANS2_GET_DFS_REFERRAL: Retrieve Distributed Filesystem Referral
            1. 4.4.1.1. Errors
          2. 4.4.2. TRANS2_REPORT_DFS_INCONSISTENCY: Inform a server about DFS Error
            1. 4.4.2.1. Errors
        5. 4.5. Miscellaneous Operations
          1. 4.5.1. NT_TRANSACT_IOCTL
            1. 4.5.1.1. Errors
          2. 4.5.2. NT_TRANSACT_QUERY_SECURITY_DESC
            1. 4.5.2.1. Errors
          3. 4.5.3. NT_TRANSACT_SET_SECURITY_DESC
            1. 4.5.3.1. Errors
      9. 5. SMB Symbolic Constants
        1. 5.1. SMB Command Codes
        2. 5.2. SMB_COM_TRANSACTION2 Subcommand codes
        3. 5.3. SMB_COM_NT_TRANSACTION Subcommand Codes
        4. 5.4. SMB Protocol Dialect Constants
      10. 6. Error Codes and Classes
      11. 7. Security Considerations
      12. 8. References
      13. 9. Appendix A -- NETBIOS transport over TCP
        1. 9.1. Connection Establishment
        2. 9.2. Connecting to a server using the NetBIOS name
        3. 9.3. Connecting to a server using a DNS name or IP address
          1. 9.3.1. NetBIOS Adapter Status
          2. 9.3.2. Generic Server Name
          3. 9.3.3. - Parsing the DNS Name (guessing)
        4. 9.4. NetBIOS Name character set
      14. 10. Appendix B -- TCP transport
      15. 11. Appendix C – Share Level Server Security
      16. 12. Appendix D – CIFS UNIX Extension
        1. 12.1. Introduction
        2. 12.2. Principles
        3. 12.3. CIFS Protocol Modifications
        4. 12.4. Modified SMBs
        5. 12.5. Guidelines for implementers
      17. 13. Appendix E – CIFS Macintosh Extension
        1. 13.1. Introduction
        2. 13.2. Principles
        3. 13.3. CIFS Protocol Modifications
        4. 13.4. Modified SMBs
        5. 13.5. Guidelines for implementers
      18. 14. Appendix F – API Numbers for Transact based RAP calls
  12. Glossary
  13. References
    1. Books
    2. Web