RevisionHistory.txt 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. Revision History:
  2. -----------------
  3. 1.0.0 - Initial release.
  4. 1.0.1 - Better handling of invalid read / write operations.
  5. 1.0.2 - Improved documentation and updated SMB_COM_TRANSACTION2 request (Technical Specifications Errata was found).
  6. 1.0.3 - Search handles (SID) are now properly closed.
  7. 1.0.4 - Added support for IPv6.
  8. 1.0.5 - Bugfix: SMB_COM_OPEN_ANDX was not returning the requested response format.
  9. File buffering logic logic was moved to a separate class.
  10. 1.0.6 - IOException handling when opening a file.
  11. Bugfix: Will not try to prefetch write-only streams.
  12. Bugfix: When closing a prefetched stream, close underlying stream.
  13. Bugfix: Proper handling of FILE_OPEN_REPARSE_POINT flag.
  14. Bugfix: Proper handling of Transaction2SetFileInformation requests.
  15. 1.0.7 - Improved connection buffer implementation.
  16. Improved compliance with MS-SMB when NTTransactIOCTLRequest.IsFsctl is set to false.
  17. Report STATUS_SHARING_VIOLATION instead of STATUS_FILE_LOCK_CONFLICT on IOException when deleting a file.
  18. 1.0.8 - Bugfix: Honor FILE_DELETE_ON_CLOSE flag.
  19. Bugfix: SMB_COM_SESSION_SETUP_ANDX Extended Request: NativeOS and NativeLanMan were not properly read.
  20. Improved Transaction2Subcommands implementation.
  21. Added support for GSSAPI SPNEGO tokens.
  22. API: Added SMBServer.OnLogEntry event.
  23. 1.0.9 - Improved SID / TID / FID / UID allocation mechanisms.
  24. API: More control over which users are permitted access via the guest user account if the normal authentication process fails.
  25. Improved NTLM authentication API and implementation.
  26. Added authentication related logging.
  27. Improved connected trees management logic.
  28. Remove connected user from connection state on Logoff.
  29. Bugfix: Transaction2Open2Response: Incorrect value was set as default CreationTime.
  30. 1.1.0 - Improved session management logic.
  31. Improved open-search management.
  32. Set DeletePending if FILE_DELETE_ON_CLOSE has been set.
  33. Properly handle NegotiateRequest.
  34. DerEncodingHelper: Fixed incorrect length calculation.
  35. Now Returning accept-completed at the final stage of a GSS authentication.
  36. LoginAPI: Properly handle ERROR_ACCOUNT_DISABLED.
  37. NTLM: improved compatibility with clients.
  38. Improved logging.
  39. 1.1.1 - Added MS-FSCC enums and structures required for SMB2.
  40. Added SMB2 command structures and enums.
  41. Added SMB 2.0 / 2.1 server implementation
  42. Updated UI to enable selection of SMB1.0/CIFS and/or SMB 2.0 / 2.1.
  43. Return STATUS_ACCESS_DENIED when writing to a file that was opened for reading and vice versa.
  44. SMB1: Return STATUS_NOT_IMPLEMENTED when receiving Remote Administration Protocol requests.
  45. SMB1: Return STATUS_INVALID_SMB when transaction subcommand is invalid.
  46. Return STATUS_INVALID_SMB instead of STATUS_SMB_BAD_COMMAND when usage of SMB_COM_NEGOTIATE is invalid.
  47. Return STATUS_INVALID_PARAMETER instead of STATUS_SMB_BAD_COMMAND when client tries to perform operation on mismatching share.
  48. Win32 authentication: fail authentication if AcceptSecurityContext return SEC_E_INVALID_TOKEN.
  49. DirectoryFileSystem: Updated Name property to return the name of the underlying file system.
  50. DirectoryFileSystem: Updated ValidatePath to verify that path starts with a blackslash.
  51. 1.1.2 - Improved NetBIOS name server implementation.
  52. Corrected SPNEGO implementation.
  53. SMB_COM_NT_CREATE_ANDX response: Added support for relative time (negative value) as specified in MS-CIFS.
  54. FileTimeHelper.ReadNullableFileTime: throw InvalidDataException if FILETIME is negative.
  55. Implemented additional FileInformation structures.
  56. Improved CreateFile implementation.
  57. OpenAndXHelper will now call NTFileSystemHelper.CreateFile.
  58. Corrected SMB_COM_QUERY_INFORMATION response implementation.
  59. Corrected object store related size fields from UInt64 to Int64.
  60. Removed LANMAN2.0 FileInformation structures.
  61. Rename will now return STATUS_OBJECT_NAME_COLLISION if the destination exists.
  62. Return STATUS_DIRECTORY_NOT_EMPTY when trying to delete a folder that is not empty.
  63. Return STATUS_OBJECT_PATH_INVALID when FILE_DIRECTORY_FILE is specified and a path component is not a directory.
  64. API: IFileSystem: Added exception documentation.
  65. API: FileSystemShare: Modified constructor.
  66. API: FileSystemShare: Added OnAccessRequest event that allows the subscriber to manage read / write permissions.
  67. API: INTFileStore interface was added for better separation between the object store layer and the SMB layer.
  68. 1.1.3 - Fixed InvalidCastException.
  69. NetworkAPI: Fixed compatibility with 64-bit environment and other improvements.
  70. SSPIHelper: Improved implementation.
  71. LoginAPI: Added ImpersonateLoggedOnUser method
  72. Improved NTLM authentication API.
  73. Improved Integrated Windows Authentication implementation.
  74. Corrected handling of SMB_COM_RENAME.
  75. NTFileSystemAdapter: Improved logging.
  76. API: GSS-style authentication, additional IGSSMechanism implementations can be provided.
  77. API: Added DeviceIOControl to the INTFileStore interface, relevant functionality moved to the object store layer.
  78. API: Added a SecurityContext class which will be passes to the underlying object store.
  79. 1.1.4 - Fixed infinite loop condition.
  80. SMB1: SMB_COM_TRANSACTION / SMB_COM_TRANSACTION2: interim response will now be sent when required.
  81. SMB1: Improved SMB_COM_NEGOTIATE response implementation.
  82. SMB1: Improved SMB_COM_SESSION_SETUP_ANDX request and response implementations.
  83. SMB1: Improved SMB_COM_NT_CREATE_ANDX request implementation.
  84. Improved NetBIOS related exception messages and documentation.
  85. Win32: Improved secur32.dll and Netapi32.dll API compatibility.
  86. 1.1.5 - NTLM: Added session key computation helper method and tests.
  87. SSPIHelper: Added GetUserName and GetSessionKey methods.
  88. IntegratedNTLMAuthenticationProvider: Bugfix: IsGuest was not always set when the username did not exist.
  89. IntegratedNTLMAuthenticationProvider: The correct SessionKey will now be returned instead of EncryptedRandomSessionKey.
  90. IndependentNTLMAuthenticationProvider: ChallengeMessage.NegotiateFlags are now properly set.
  91. IndependentNTLMAuthenticationProvider: Compute and store SessionKey.
  92. IndependentNTLMAuthenticationProvider: Set KeyExchange NTLM flag if client request it.
  93. SMB2Command: Implemented signing in GetCommandChainBytes.
  94. SMB2: Workaround to prevent Windows 7 / 8 / 10 from sending ChangeNotify requests infinitely.
  95. SMB2: Correctly report server start time in SMB_NEGOTIATE response.
  96. SMB2: Retrieve SessionKey from GSS mechanism and store it in SMB2Session.
  97. SMB2: Enable message signing if client request it.
  98. 1.1.6 - SMBServer: Added server Start / Stop log entries.
  99. SMBServer: Hid internal methods and classes.
  100. SMBServer: Each connection now use a dedicaded thread for send operations.
  101. SMBServer: TCP KeepAlive is now used to detect dead clients.
  102. SMBServer: All matching opened files will now be closed during tree disconnect.
  103. SMBServer: All matching opened files will now be closed during logoff.
  104. SMBServer: All matching opened files will now be closed during connection termination.
  105. SMBServer API: Moved socket parameters to the Start method.
  106. SMBServer API: Added GetSessionsInformation method
  107. SMB1: Retrieve SessionKey from GSS mechanism and store it in SMB1Session.
  108. Bugfix: Independent / Integrated NTLMAuthenticationProvider: MachineName was not read from AuthenticationMessage.
  109. GSS: Minor improvements.
  110. 1.1.7 - Fixed FormatException.
  111. SocketUtils.ReleaseSocket: Improved exception handling.
  112. SMB2: Check share permissions before Read / Write.
  113. SMB2: FileID related improvements.
  114. SMBServer: Hid internal classes.
  115. SMB2: CloseHelper: An error response will be returned if the underlying file store was not able to close the handle.
  116. Renamed ShareCollection to SMBShareCollection.
  117. NetBIOS session packet length is now calculated correctly.
  118. Added LogWriter implementation to handle log events
  119. Workstation and Domain information are now logged during session setup.
  120. Write to log when share access was denied.
  121. Add share information to log message where applicable.
  122. Various Logging related improvements.
  123. 1.1.8 - CreateFile: Return STATUS_NO_SUCH_FILE when file not found instead of STATUS_OBJECT_PATH_NOT_FOUND.
  124. NTFileSystemAdapter: Bugfix: FILE_DELETE_ON_CLOSE was ignored in some cases.
  125. Various Logging related improvements.
  126. 1.1.9 - IFileSystem: Added FileOptions parameter to OpenFile.
  127. SMB1: Added support for paths without a leading backslash.
  128. NTFileSystemAdapter: Bugfix: FILE_OPEN_IF was not handled properly if the file exists.
  129. IndependentNTLMAuthenticationProvider: Workaround for NTLMv2 with LmChallengeResponse length of 0 bytes.
  130. Minor logging improvements.
  131. 1.2.0 - SMB1: Minor optimization of GetFindInformationList.
  132. SMB2: Bugfix: QUERY_DIRECTORY response buffer length sometimes exceeded the request's OutputBufferLength.
  133. Bugfix: DerEncodingHelper.WriteLength was writing incorrect length.
  134. Improved GSS implementation.
  135. Corrected exception message.
  136. 1.2.1 - GSSProvider: Marked core methods as virtual to improve extensibility.
  137. SMB1: Bugfix: The server was returning more bytes than the specified maximum for SMB_COM_NT_TRANSACT and SMB_COM_NT_TRANSACT commands.
  138. SMBServer: Correct handling of STATUS_BUFFER_OVERFLOW returned by the NTFileStore.
  139. Improved implementation of RPC PDUs.
  140. SMBServer: Improved Named Pipe implementation.
  141. Several enums and events were renamed.
  142. 1.2.2 - NTFileSystemAdapter: Bugfix: FILE_DELETE_ON_CLOSE flag was ignored in some cases.
  143. FileSystemInformation: Added GetFileSystemInformation method.
  144. INTFileStore: CreateFile: Added FileAttributes parameter.
  145. SMB1FileStoreHelper: Delete / Rename: The status of SetFileInformation should be returned regardless of the status of CloseFile.
  146. SMB1FileStoreHelper: QueryInformation / SetInformation / QueryDirectory: Bugfix: Temporary handle was not closed.
  147. SMB2 Commands: Marked StructureSize as private.
  148. Improved compatibility with Windows Native API.
  149. Added SMB_COM_NT_CANCEL request implementation.
  150. SMB1: NTTransactionHelper / TransactionHelper: Store MaxParameterCount (required for NT_TRANSACT_NOTIFY_CHANGE).
  151. SMB1/SMB2 Headers: Marked Protocol ID bytes as private.
  152. SMBServer: SMB1: SMB_COM_FLUSH will now call FlushFileBuffers on the handle associated with the specified FID.
  153. SMBServer: SMB1: Properly handle SMB_COM_NT_TRANSACT requests with invalid function code.
  154. SMBServer: SMB2: Do not try to process async commands other than Cancel.
  155. INTFileStore: Added NotifyChange and Cancel methods.
  156. SMBServer: Added Support for NotifyChange and Cancel if the underlying file store supports it.
  157. NTFileStore: Added FileLinkInformationType1 and FileRenameInformation Type1 implementations.
  158. Added NTDirectoryFileSystem implementation for passsing-through IO requests to the local NT storage subsystem.
  159. SMBServer: SMB2: Bugfix: Last SessionSetupResponse was not signed, final async response was not signed.
  160. Minor logging improvements.
  161. 1.2.3 - SMBServer: SMB1: ReadAndX: Added workaround for JCIFS.
  162. SMBServer: Release connections and associated resources when stopping the server.
  163. SMBServer: SMB1FileStoreHelper: Delete / Rename: Bugfix: The temporary file handle was not closed.
  164. SMBServer: SMB1: Delete / Rename commands no longer require exlusive access to the file / directory being delete / renamed.
  165. SMBServer: Bugfix: Incorrect OplockLevel was reported.
  166. Improved SMB_COM_NT_TRANSACT response implementation.
  167. SMBServer: SMB1: Added support for splitting SMB_COM_NT_TRANSACT transaction over multiple responses.
  168. SMBServer: SMB1: Corrected assembly of AndX Response chain.
  169. SMBServer: Store the share name for each open file.
  170. SMBServer: GetSessionsInformation: Include share name when listing open files.
  171. SMBServer: Bugfix: Keep accepting new connections after getting WSAETIMEDOUT on a new connection request.
  172. SMBServer: SMB1: Set SMB_FLAGS2_LONG_NAMES in NT_TRANSACT_NOTIFY_CHANGE response.
  173. NTDirectoryFileSystem: CreateFile: Workaround for using FILE_NO_INTERMEDIATE_BUFFERING and FILE_APPEND_DATA together.
  174. NTDirectoryFileSystem: SetFileInformation will no longed modify the FileInformation instance received.
  175. Minor logging improvement.
  176. 1.2.4 - IndependentNTLMAuthenticationProvider: Added account lockout mechanism to hinder bruteforce attacks.
  177. SMBServer: Bugfix: Do not send NotifyChange response if the session has been closed.
  178. SMB1Command: Mark SMBParameters and SMBData as protected.
  179. NTLMAuthenticationProviderBase: Properly handle invalid NegotiateMessage / AuthenticateMessage.
  180. GSSProvider: Properly handle invalid SPNEGO Token.
  181. FileSystemShare: Added ability to specify client-side caching policy.
  182. Bugfix: Check share-level write access on the new file name before sending FileRenameInformation to the object store.
  183. Minor logging improvements.
  184. Minor code refactoring.
  185. 1.2.5 - IOCtlHelper: Improved compliance with the specifications.
  186. Added FSCTL_PIPE_WAIT Request implementation.
  187. Pass TRANS_WAIT_NMPIPE requests to the underlying object store.
  188. Corrected StringComparison type.
  189. NamedPipeStore: Added support for FSCTL_PIPE_WAIT.
  190. IOControlCode: Added additional values.
  191. NTStatus: Added STATUS_PRIVILEGE_NOT_HELD.
  192. SMBServer: SMB1: Fixed unhandled NullReferenceException when an Invalid FID was specified for a Read / ReadAndX request.
  193. SMB2: Improved LockRequest implementation.
  194. SMB2: LockElement: Added SharedLock / ExclusiveLock / Unlock / FailImmediately properties.
  195. INTFileStore: Added LockFile and UnlockFile methods.
  196. SMB2: LockElement: Fixed a bug in ReadLockList / WriteLockList.
  197. Pass lock / unlock requests to the underlying object store.
  198. NTDirectoryFileSystem: Pass-through LockFile / UnlockFile requests.
  199. Corrected FileStreamInformation implementation.
  200. Corrected FileFullEaInformation implementation.
  201. SMBServer: SMB1: Added support for SMB_FIND_FILE_ID_FULL_DIRECTORY_INFO and SMB_FIND_FILE_ID_BOTH_DIRECTORY_INFO.
  202. Logging improvements.
  203. 1.2.6 - NTDirectoryFileSystem: Pass-through FSCTL requests.
  204. NTDirectoryFileSystem: QueryDirectory / GetFileSystemInformation: Prevent possibility of reading data beyond the number of bytes written.
  205. NTLM: NEGOTIATE_MESSAGE: Do not include DomainName and WorkstationName if the appropriate flags are not set.
  206. NTLM: CHALLENGE_MESSAGE: Do not include TargetName and TargetInfo if the appropriate flags are not set.
  207. NTLM: AUTHENTICATE_MESSAGE: Do not include EncryptedRandomSessionKey if the appropriate flags are not set.
  208. NTLM: NEGOTIATE_MESSAGE: Bugfix: Workstation overwrote DomainName.
  209. NTLM: NEGOTIATE_MESSAGE: Improved implementation.
  210. NTLM: Added constructor to NTLMv2_CLIENT_CHALLENGE.
  211. NTLM: NegotiateFlags: Renamed LanManagerKey to LanManagerSessionKey.
  212. NTLM: Renamed NTLMv1 Extended Security to NTLMv1 Extended Session Security.
  213. NTLM: Corrected CHALLENGE_MESSAGE test.
  214. SMB1: Corrected implementation of SMB_COM_SESSION_SETUP_ANDX response.
  215. SMB1: Corrected implementaion SMB_COM_SESSION_SETUP_ANDX Extended Security response.
  216. SMB1: Improved implementation of SMB1Command.ReadCommandResponse method.
  217. SMB1: SessionSetupHelper: Invalid NTLM flag was set (and ignored) in some cases.
  218. SMB1: Minor implementation improvements of SMB1 commands.
  219. SMB2: Renamed ServerCapabilities to Capabilities and added notes.
  220. Use InvalidDataException instead of InvalidRequestException.
  221. Logging improvement.
  222. 1.2.7 - SMBServer: Bugfix: Connection resources were not released after send error in some cases.
  223. SMBServer: SMB1: NotifyChange: Use ErrorResponse for any status other than STATUS_SUCCESS.
  224. SMBServer: SMB1: Return STATUS_BAD_DEVICE_TYPE when applicable.
  225. SMBServer: SMB2: Improved handling of compunded related requests.
  226. SMBServer: SMB2: ChangeNotify: Return ErrorResponse if the object store returns an error.
  227. NTLM: IndependentNTLMAuthenticationProvider: Changed the default account lockout settings.
  228. SMB1: Corrected implementation of SMB_COM_ECHO request.
  229. SMB1: Corrected SMB_COM_TREE_CONNECT_ANDX request implementation and added constructor.
  230. SMB1: Corrected SMB_COM_NT_CREATE_ANDX implementation.
  231. SMB1: Renamed ServerCapabilities to Capabilities.
  232. SMB1: SMB_COM_SESSION_SETUP_ANDX response: Added workaround for a single terminating null byte.
  233. SMB1: Corrected implementation of SMB_COM_TRANSACTION subcommand request.
  234. SMB1: Improved SMB_COM_TRANSACTION request implementation and corrected GetBytes() implementation.
  235. SMB2: NegotiateRequest: Corrected implementation.
  236. SMB2: SMB2Command: Added ReadResponse and ReadResponseChain methods.
  237. Improved AccessMask implementation.
  238. RPCPipeStream: Treat the bytes written to the pipe as a single message unit.
  239. RPC: Improved PDUs implementation: Hid FragmentLength variable and added Length property.
  240. RPC: Added constructor to ContextElement.
  241. RPC: Added BindNakPDU implementation.
  242. Services: Added ServerServiceOpName and WorkstationServiceOpName enums.
  243. Services: RemoteServiceHelper: Marked transfer syntax GUIDs as public and added version numbers.
  244. Services: ServerService: Added ServicePipeName, ServiceInterfaceGuid and ServiceVersion declarations.
  245. Services: WorkstationService: Added ServicePipeName, ServiceInterfaceGuid and ServiceVersion declarations.
  246. Services: ServerService: NetrServerGetInfo: Added constructor.
  247. Services: ServerService: ShareEnum: Bugfix: NullReferenceException was thrown if Info was null.
  248. Services: ServerService: Implementation improvement.
  249. Services: ServerService: SHARE_INFO_0_CONTAINER, SHARE_INFO_1_CONTAINER: Changed the default value of Entries to null.
  250. NTStatus: Added STATUS_DELETE_PENDING, STATUS_BAD_DEVICE_TYPE and STATUS_BAD_NETWORK_NAME.
  251. SocketUtils: Improved ReleaseSocket implementation.
  252. Logging and documentation improvements.
  253. SMB1 Client: Added Login implementation using NTLM authentication.
  254. SMB1Client: Additional client functions implemented.