123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- Revision History:
- -----------------
- 1.0.0 - Initial release.
- 1.0.1 - Better handling of invalid read / write operations.
- 1.0.2 - Improved documentation and updated SMB_COM_TRANSACTION2 request (Technical Specifications Errata was found).
- 1.0.3 - Search handles (SID) are now properly closed.
- 1.0.4 - Added support for IPv6.
- 1.0.5 - Bugfix: SMB_COM_OPEN_ANDX was not returning the requested response format.
- File buffering logic logic was moved to a separate class.
- 1.0.6 - IOException handling when opening a file.
- Bugfix: Will not try to prefetch write-only streams.
- Bugfix: When closing a prefetched stream, close underlying stream.
- Bugfix: Proper handling of FILE_OPEN_REPARSE_POINT flag.
- Bugfix: Proper handling of Transaction2SetFileInformation requests.
- 1.0.7 - Improved connection buffer implementation.
- Improved compliance with MS-SMB when NTTransactIOCTLRequest.IsFsctl is set to false.
- Report STATUS_SHARING_VIOLATION instead of STATUS_FILE_LOCK_CONFLICT on IOException when deleting a file.
- 1.0.8 - Bugfix: Honor FILE_DELETE_ON_CLOSE flag.
- Bugfix: SMB_COM_SESSION_SETUP_ANDX Extended Request: NativeOS and NativeLanMan were not properly read.
- Improved Transaction2Subcommands implementation.
- Added support for GSSAPI SPNEGO tokens.
- API: Added SMBServer.OnLogEntry event.
- 1.0.9 - Improved SID / TID / FID / UID allocation mechanisms.
- API: More control over which users are permitted access via the guest user account if the normal authentication process fails.
- Improved NTLM authentication API and implementation.
- Added authentication related logging.
- Improved connected trees management logic.
- Remove connected user from connection state on Logoff.
- Bugfix: Transaction2Open2Response: Incorrect value was set as default CreationTime.
- 1.1.0 - Improved session management logic.
- Improved open-search management.
- Set DeletePending if FILE_DELETE_ON_CLOSE has been set.
- Properly handle NegotiateRequest.
- DerEncodingHelper: Fixed incorrect length calculation.
- Now Returning accept-completed at the final stage of a GSS authentication.
- LoginAPI: Properly handle ERROR_ACCOUNT_DISABLED.
- NTLM: improved compatibility with clients.
- Improved logging.
- 1.1.1 - Added MS-FSCC enums and structures required for SMB2.
- Added SMB2 command structures and enums.
- Added SMB 2.0 / 2.1 server implementation
- Updated UI to enable selection of SMB1.0/CIFS and/or SMB 2.0 / 2.1.
- Return STATUS_ACCESS_DENIED when writing to a file that was opened for reading and vice versa.
- SMB1: Return STATUS_NOT_IMPLEMENTED when receiving Remote Administration Protocol requests.
- SMB1: Return STATUS_INVALID_SMB when transaction subcommand is invalid.
- Return STATUS_INVALID_SMB instead of STATUS_SMB_BAD_COMMAND when usage of SMB_COM_NEGOTIATE is invalid.
- Return STATUS_INVALID_PARAMETER instead of STATUS_SMB_BAD_COMMAND when client tries to perform operation on mismatching share.
- Win32 authentication: fail authentication if AcceptSecurityContext return SEC_E_INVALID_TOKEN.
- DirectoryFileSystem: Updated Name property to return the name of the underlying file system.
- DirectoryFileSystem: Updated ValidatePath to verify that path starts with a blackslash.
- 1.1.2 - Improved NetBIOS name server implementation.
- Corrected SPNEGO implementation.
- SMB_COM_NT_CREATE_ANDX response: Added support for relative time (negative value) as specified in MS-CIFS.
- FileTimeHelper.ReadNullableFileTime: throw InvalidDataException if FILETIME is negative.
- Implemented additional FileInformation structures.
- Improved CreateFile implementation.
- OpenAndXHelper will now call NTFileSystemHelper.CreateFile.
- Corrected SMB_COM_QUERY_INFORMATION response implementation.
- Corrected object store related size fields from UInt64 to Int64.
- Removed LANMAN2.0 FileInformation structures.
- Rename will now return STATUS_OBJECT_NAME_COLLISION if the destination exists.
- Return STATUS_DIRECTORY_NOT_EMPTY when trying to delete a folder that is not empty.
- Return STATUS_OBJECT_PATH_INVALID when FILE_DIRECTORY_FILE is specified and a path component is not a directory.
- API: IFileSystem: Added exception documentation.
- API: FileSystemShare: Modified constructor.
- API: FileSystemShare: Added OnAccessRequest event that allows the subscriber to manage read / write permissions.
- API: INTFileStore interface was added for better separation between the object store layer and the SMB layer.
- 1.1.3 - Fixed InvalidCastException.
- NetworkAPI: Fixed compatibility with 64-bit environment and other improvements.
- SSPIHelper: Improved implementation.
- LoginAPI: Added ImpersonateLoggedOnUser method
- Improved NTLM authentication API.
- Improved Integrated Windows Authentication implementation.
- Corrected handling of SMB_COM_RENAME.
- NTFileSystemAdapter: Improved logging.
- API: GSS-style authentication, additional IGSSMechanism implementations can be provided.
- API: Added DeviceIOControl to the INTFileStore interface, relevant functionality moved to the object store layer.
- API: Added a SecurityContext class which will be passes to the underlying object store.
- 1.1.4 - Fixed infinite loop condition.
- SMB1: SMB_COM_TRANSACTION / SMB_COM_TRANSACTION2: interim response will now be sent when required.
- SMB1: Improved SMB_COM_NEGOTIATE response implementation.
- SMB1: Improved SMB_COM_SESSION_SETUP_ANDX request and response implementations.
- SMB1: Improved SMB_COM_NT_CREATE_ANDX request implementation.
- Improved NetBIOS related exception messages and documentation.
- Win32: Improved secur32.dll and Netapi32.dll API compatibility.
- 1.1.5 - NTLM: Added session key computation helper method and tests.
- SSPIHelper: Added GetUserName and GetSessionKey methods.
- IntegratedNTLMAuthenticationProvider: Bugfix: IsGuest was not always set when the username did not exist.
- IntegratedNTLMAuthenticationProvider: The correct SessionKey will now be returned instead of EncryptedRandomSessionKey.
- IndependentNTLMAuthenticationProvider: ChallengeMessage.NegotiateFlags are now properly set.
- IndependentNTLMAuthenticationProvider: Compute and store SessionKey.
- IndependentNTLMAuthenticationProvider: Set KeyExchange NTLM flag if client request it.
- SMB2Command: Implemented signing in GetCommandChainBytes.
- SMB2: Workaround to prevent Windows 7 / 8 / 10 from sending ChangeNotify requests infinitely.
- SMB2: Correctly report server start time in SMB_NEGOTIATE response.
- SMB2: Retrieve SessionKey from GSS mechanism and store it in SMB2Session.
- SMB2: Enable message signing if client request it.
- 1.1.6 - SMBServer: Added server Start / Stop log entries.
- SMBServer: Hid internal methods and classes.
- SMBServer: Each connection now use a dedicaded thread for send operations.
- SMBServer: TCP KeepAlive is now used to detect dead clients.
- SMBServer: All matching opened files will now be closed during tree disconnect.
- SMBServer: All matching opened files will now be closed during logoff.
- SMBServer: All matching opened files will now be closed during connection termination.
- SMBServer API: Moved socket parameters to the Start method.
- SMBServer API: Added GetSessionsInformation method
- SMB1: Retrieve SessionKey from GSS mechanism and store it in SMB1Session.
- Bugfix: Independent / Integrated NTLMAuthenticationProvider: MachineName was not read from AuthenticationMessage.
- GSS: Minor improvements.
- 1.1.7 - Fixed FormatException.
- SocketUtils.ReleaseSocket: Improved exception handling.
- SMB2: Check share permissions before Read / Write.
- SMB2: FileID related improvements.
- SMBServer: Hid internal classes.
- SMB2: CloseHelper: An error response will be returned if the underlying file store was not able to close the handle.
- Renamed ShareCollection to SMBShareCollection.
- NetBIOS session packet length is now calculated correctly.
- Added LogWriter implementation to handle log events
- Workstation and Domain information are now logged during session setup.
- Write to log when share access was denied.
- Add share information to log message where applicable.
- Various Logging related improvements.
- 1.1.8 - CreateFile: Return STATUS_NO_SUCH_FILE when file not found instead of STATUS_OBJECT_PATH_NOT_FOUND.
- NTFileSystemAdapter: Bugfix: FILE_DELETE_ON_CLOSE was ignored in some cases.
- Various Logging related improvements.
- 1.1.9 - IFileSystem: Added FileOptions parameter to OpenFile.
- SMB1: Added support for paths without a leading backslash.
- NTFileSystemAdapter: Bugfix: FILE_OPEN_IF was not handled properly if the file exists.
- IndependentNTLMAuthenticationProvider: Workaround for NTLMv2 with LmChallengeResponse length of 0 bytes.
- Minor logging improvements.
- 1.2.0 - SMB1: Minor optimization of GetFindInformationList.
- SMB2: Bugfix: QUERY_DIRECTORY response buffer length sometimes exceeded the request's OutputBufferLength.
- Bugfix: DerEncodingHelper.WriteLength was writing incorrect length.
- Improved GSS implementation.
- Corrected exception message.
- 1.2.1 - GSSProvider: Marked core methods as virtual to improve extensibility.
- SMB1: Bugfix: The server was returning more bytes than the specified maximum for SMB_COM_NT_TRANSACT and SMB_COM_NT_TRANSACT commands.
- SMBServer: Correct handling of STATUS_BUFFER_OVERFLOW returned by the NTFileStore.
- Improved implementation of RPC PDUs.
- SMBServer: Improved Named Pipe implementation.
- Several enums and events were renamed.
- 1.2.2 - NTFileSystemAdapter: Bugfix: FILE_DELETE_ON_CLOSE flag was ignored in some cases.
- FileSystemInformation: Added GetFileSystemInformation method.
- INTFileStore: CreateFile: Added FileAttributes parameter.
- SMB1FileStoreHelper: Delete / Rename: The status of SetFileInformation should be returned regardless of the status of CloseFile.
- SMB1FileStoreHelper: QueryInformation / SetInformation / QueryDirectory: Bugfix: Temporary handle was not closed.
- SMB2 Commands: Marked StructureSize as private.
- Improved compatibility with Windows Native API.
- Added SMB_COM_NT_CANCEL request implementation.
- SMB1: NTTransactionHelper / TransactionHelper: Store MaxParameterCount (required for NT_TRANSACT_NOTIFY_CHANGE).
- SMB1/SMB2 Headers: Marked Protocol ID bytes as private.
- SMBServer: SMB1: SMB_COM_FLUSH will now call FlushFileBuffers on the handle associated with the specified FID.
- SMBServer: SMB1: Properly handle SMB_COM_NT_TRANSACT requests with invalid function code.
- SMBServer: SMB2: Do not try to process async commands other than Cancel.
- INTFileStore: Added NotifyChange and Cancel methods.
- SMBServer: Added Support for NotifyChange and Cancel if the underlying file store supports it.
- NTFileStore: Added FileLinkInformationType1 and FileRenameInformation Type1 implementations.
- Added NTDirectoryFileSystem implementation for passsing-through IO requests to the local NT storage subsystem.
- SMBServer: SMB2: Bugfix: Last SessionSetupResponse was not signed, final async response was not signed.
- Minor logging improvements.
- 1.2.3 - SMBServer: SMB1: ReadAndX: Added workaround for JCIFS.
- SMBServer: Release connections and associated resources when stopping the server.
- SMBServer: SMB1FileStoreHelper: Delete / Rename: Bugfix: The temporary file handle was not closed.
- SMBServer: SMB1: Delete / Rename commands no longer require exlusive access to the file / directory being delete / renamed.
- SMBServer: Bugfix: Incorrect OplockLevel was reported.
- Improved SMB_COM_NT_TRANSACT response implementation.
- SMBServer: SMB1: Added support for splitting SMB_COM_NT_TRANSACT transaction over multiple responses.
- SMBServer: SMB1: Corrected assembly of AndX Response chain.
- SMBServer: Store the share name for each open file.
- SMBServer: GetSessionsInformation: Include share name when listing open files.
- SMBServer: Bugfix: Keep accepting new connections after getting WSAETIMEDOUT on a new connection request.
- SMBServer: SMB1: Set SMB_FLAGS2_LONG_NAMES in NT_TRANSACT_NOTIFY_CHANGE response.
- NTDirectoryFileSystem: CreateFile: Workaround for using FILE_NO_INTERMEDIATE_BUFFERING and FILE_APPEND_DATA together.
- NTDirectoryFileSystem: SetFileInformation will no longed modify the FileInformation instance received.
- Minor logging improvement.
- 1.2.4 - IndependentNTLMAuthenticationProvider: Added account lockout mechanism to hinder bruteforce attacks.
- SMBServer: Bugfix: Do not send NotifyChange response if the session has been closed.
- SMB1Command: Mark SMBParameters and SMBData as protected.
- NTLMAuthenticationProviderBase: Properly handle invalid NegotiateMessage / AuthenticateMessage.
- GSSProvider: Properly handle invalid SPNEGO Token.
- FileSystemShare: Added ability to specify client-side caching policy.
- Bugfix: Check share-level write access on the new file name before sending FileRenameInformation to the object store.
- Minor logging improvements.
- Minor code refactoring.
- 1.2.5 - IOCtlHelper: Improved compliance with the specifications.
- Added FSCTL_PIPE_WAIT Request implementation.
- Pass TRANS_WAIT_NMPIPE requests to the underlying object store.
- Corrected StringComparison type.
- NamedPipeStore: Added support for FSCTL_PIPE_WAIT.
- IOControlCode: Added additional values.
- NTStatus: Added STATUS_PRIVILEGE_NOT_HELD.
- SMBServer: SMB1: Fixed unhandled NullReferenceException when an Invalid FID was specified for a Read / ReadAndX request.
- SMB2: Improved LockRequest implementation.
- SMB2: LockElement: Added SharedLock / ExclusiveLock / Unlock / FailImmediately properties.
- INTFileStore: Added LockFile and UnlockFile methods.
- SMB2: LockElement: Fixed a bug in ReadLockList / WriteLockList.
- Pass lock / unlock requests to the underlying object store.
- NTDirectoryFileSystem: Pass-through LockFile / UnlockFile requests.
- Corrected FileStreamInformation implementation.
- Corrected FileFullEaInformation implementation.
- SMBServer: SMB1: Added support for SMB_FIND_FILE_ID_FULL_DIRECTORY_INFO and SMB_FIND_FILE_ID_BOTH_DIRECTORY_INFO.
- Logging improvements.
- 1.2.6 - NTDirectoryFileSystem: Pass-through FSCTL requests.
- NTDirectoryFileSystem: QueryDirectory / GetFileSystemInformation: Prevent possibility of reading data beyond the number of bytes written.
- NTLM: NEGOTIATE_MESSAGE: Do not include DomainName and WorkstationName if the appropriate flags are not set.
- NTLM: CHALLENGE_MESSAGE: Do not include TargetName and TargetInfo if the appropriate flags are not set.
- NTLM: AUTHENTICATE_MESSAGE: Do not include EncryptedRandomSessionKey if the appropriate flags are not set.
- NTLM: NEGOTIATE_MESSAGE: Bugfix: Workstation overwrote DomainName.
- NTLM: NEGOTIATE_MESSAGE: Improved implementation.
- NTLM: Added constructor to NTLMv2_CLIENT_CHALLENGE.
- NTLM: NegotiateFlags: Renamed LanManagerKey to LanManagerSessionKey.
- NTLM: Renamed NTLMv1 Extended Security to NTLMv1 Extended Session Security.
- NTLM: Corrected CHALLENGE_MESSAGE test.
- SMB1: Corrected implementation of SMB_COM_SESSION_SETUP_ANDX response.
- SMB1: Corrected implementaion SMB_COM_SESSION_SETUP_ANDX Extended Security response.
- SMB1: Improved implementation of SMB1Command.ReadCommandResponse method.
- SMB1: SessionSetupHelper: Invalid NTLM flag was set (and ignored) in some cases.
- SMB1: Minor implementation improvements of SMB1 commands.
- SMB2: Renamed ServerCapabilities to Capabilities and added notes.
- Use InvalidDataException instead of InvalidRequestException.
- Logging improvement.
- 1.2.7 - SMBServer: Bugfix: Connection resources were not released after send error in some cases.
- SMBServer: SMB1: NotifyChange: Use ErrorResponse for any status other than STATUS_SUCCESS.
- SMBServer: SMB1: Return STATUS_BAD_DEVICE_TYPE when applicable.
- SMBServer: SMB2: Improved handling of compunded related requests.
- SMBServer: SMB2: ChangeNotify: Return ErrorResponse if the object store returns an error.
- NTLM: IndependentNTLMAuthenticationProvider: Changed the default account lockout settings.
- SMB1: Corrected implementation of SMB_COM_ECHO request.
- SMB1: Corrected SMB_COM_TREE_CONNECT_ANDX request implementation and added constructor.
- SMB1: Corrected SMB_COM_NT_CREATE_ANDX implementation.
- SMB1: Renamed ServerCapabilities to Capabilities.
- SMB1: SMB_COM_SESSION_SETUP_ANDX response: Added workaround for a single terminating null byte.
- SMB1: Corrected implementation of SMB_COM_TRANSACTION subcommand request.
- SMB1: Improved SMB_COM_TRANSACTION request implementation and corrected GetBytes() implementation.
- SMB2: NegotiateRequest: Corrected implementation.
- SMB2: SMB2Command: Added ReadResponse and ReadResponseChain methods.
- Improved AccessMask implementation.
- RPCPipeStream: Treat the bytes written to the pipe as a single message unit.
- RPC: Improved PDUs implementation: Hid FragmentLength variable and added Length property.
- RPC: Added constructor to ContextElement.
- RPC: Added BindNakPDU implementation.
- Services: Added ServerServiceOpName and WorkstationServiceOpName enums.
- Services: RemoteServiceHelper: Marked transfer syntax GUIDs as public and added version numbers.
- Services: ServerService: Added ServicePipeName, ServiceInterfaceGuid and ServiceVersion declarations.
- Services: WorkstationService: Added ServicePipeName, ServiceInterfaceGuid and ServiceVersion declarations.
- Services: ServerService: NetrServerGetInfo: Added constructor.
- Services: ServerService: ShareEnum: Bugfix: NullReferenceException was thrown if Info was null.
- Services: ServerService: Implementation improvement.
- Services: ServerService: SHARE_INFO_0_CONTAINER, SHARE_INFO_1_CONTAINER: Changed the default value of Entries to null.
- NTStatus: Added STATUS_DELETE_PENDING, STATUS_BAD_DEVICE_TYPE and STATUS_BAD_NETWORK_NAME.
- SocketUtils: Improved ReleaseSocket implementation.
- Logging and documentation improvements.
- SMB1 Client: Added Login implementation using NTLM authentication.
- SMB1Client: Additional client functions implemented.
|