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. SMB1Client: Added Login implementation using NTLM authentication. SMB1Client: Additional client functions implemented. 1.2.8 - SMB1: Improved FindInformation implementation and corrected reading of FindInformation entries from buffer. SMB1: Added ParametersLength definition to several Transaction2Subcommands. SMB1: Transaction2SetFileInformationRequest: SetInformation method will now set InformationLevel. Client: ServerServiceHelper: ListShares: Added support for NetrShareEnumResponse spanning more than one RPC PDU and improved error handling. Client: SMB1FileStore: Added native QueryDirectory, GetFileInformation, GetFileSystemInformation and SetFileInformation implementations. 1.2.9 - NTFileStore: Added SecurityInformation enum. NTFileStore: SecurityDescriptor: Added Length property. NTFileStore: Completed implementation of SECURITY_DESCRIPTOR. INTFileStore: Added SetFileSystemInformation, GetSecurityInformation and SetSecurityInformation methods. NTDirectoryFileSystem: Added NtSetVolumeInformationFile, NtQuerySecurityObject and NtSetSecurityObject external method declarations. SMBServer: Pass GetSecurityInformation and SetSecurityInformation requests to the underlying object store. SMBServer: Logging improvement. SMB1: Improved implementation of TRANS2_GET_DFS_REFERRAL request and response. SMB1: Improved NT_TRANSACT_QUERY_SECURITY_DESC response implementation. SMB1: Added NT_TRANSACT_SET_SECURITY_DESC response implementation. SMB1: Improved implementation of TRANS2_QUERY_FILE_INFORMATION and TRANS2_QUERY_PATH_INFORMATION. SMB1: NTTransactSubcommandName: Added NT_TRANSACT_QUERY_QUOTA and NT_TRANSACT_SET_QUOTA. SMB1: Transaction2SubcommandName: Added TRANS2_SET_FS_INFORMATION. SMB1: Added implementation of TRANS2_SET_FS_INFORMATION request and response. SMB2: WriteRequest: DataOffset field was set incorrectly in some cases. SMB2: IOCtlRequest: OutputOffset field was set incorrectly in some cases. SMB2: Improved implementation of QUERY_INFO request and response. SMB2: Improved implementation of SMB2_CREATE_CONTEXT. SMB2: Improved implementation of SET_INFO Request. SMB2: Improved ERROR response implementation. SPNEGO: Bugfix: negTokenResp is allowed to have a generic GSSAPI header. SPNEGO: Minor code refactoring. NTStatus: Added STATUS_INVALID_DEVICE_REQUEST. Improved exception messages. Client: Preliminary SMB2 client implementation. Client: NTLMAuthenticationHelper: Corrected sessionKey computation. Client: SMB1FileStore, SMB2FileStore: Added Disconnect method. Client: Bugfix: The tree connection to the named pipe share that was created in the ListShares method was not being terminated. Client: ISMBFileStore interface added. Client: ISMBClient interface added. Client: NTLMAuthenticationHelper: Bugfix: The generic GSSAPI header was not appended to negTokenInit. Client: Throw Exception if attemping to logoff when the client is not connected. Client: SMB1Client: Minor code refactoring. 1.3.0 - NTFileStore: FileBasicInformation, SMB_SET_FILE_BASIC_INFO: Bugfix: Correctly handle FILETIME value of -1. Server: Bugfix: Some connection resources were not released after send error in some cases. Server: SMB2: SMB2Session: Fixed KeyNotFoundException when calling the DisconnectTree method. Server: Corrected synchronization of SMB1Session and SMB2Session TreeID and FileID allocation methods. Server: SMB1: Set CAP_RPC_REMOTE_APIS flag. Server: SMB1: Added support for pass-through Information Levels. Server: Pass SetFileSystemInformation requests to the underlying object store. SMB1: Transaction2 subcommands: Added support for pass-through Information Levels. SMB2: Added helper methods to QUERY_INFO response implementation. SMB2: Corrected CREATE request implementation. Client: SMB1Client: Store and expose server capabilities. Client: SMB2Client: Added MaxTransactSize, MaxReadSize and MaxWriteSize properties. Client: SMB2Client: Implemented QueryDirectory method. Client: SMB1FileStore: Use the SMB1Client.Unicode property and SMB_FLAGS2_UNICODE flag instead of assuming the server supports Unicode. Client: SMB1FileStore: Added GetFileInformation and GetFileSystemInformation for servers that supports pass-through Information Levels. Client: SMB2FileStore: Implemented GetFileInformation and GetFileSystemInformation methods. 1.3.1 - Server: Prevent clients from creating files without sufficient permissions. Server: SMB1: Increased MaxBufferSize to 65535 bytes. Server: OpenFileObject: Added FileAccess property. Server API: Added the OpenFileInformation class to provide more information about open files. SMB1: QueryInformationHelper: Bugfix: LastChangeTime was not correctly set. SMB1: QueryInformationHelper: Added ToFileInformationLevel and ToFileInformation methods. SMB1: Renamed QueryFileExtendedAttributeInfo to QueryFileEaInfo. Client: SMB2Client: Limit the value of MaxTransactSize, MaxReadSize and MaxWriteSize to 64KB. Client: ISMBClient: Added MaxReadSize and MaxWriteSize properties. Client: ISMBFileStore: Added MaxReadSize and MaxWriteSize properties. Client: SMB1FileStore: Completed implementation of GetFileInformation. Minor code refactoring and documentation improvements. 1.3.2 - SMB1: SMB1Helper.ReadNullableFileTime: Return DateTime in UTC for negative values. SMB1: Bugfixes and improvements to the WriteBytes methods of several SMB1 structures. SMB1: SMB_COM_OPEN_ANDX request and response: Implemented client related functionality. SMB1: NTCreateAndXRequest: Removed duplicate functionality. SMB1: SMB_DATE, SMB_TIME, UTime: Set DateTimeKind to Local. SMB1: SMB_COM_NT_CREATE_ANDX response and extended response bugfixes. Server: LoginCounter: Use UTC instead of local time. Server: Use UTC instead of local time for DateTime values returned by the API. Server: Maintain connection creation time and last receive time. Server: Added an optional mechanism to disconnect connections after a specified duration of inactivity. 1.3.3 - Server: Maintain connection last send time. Server: Added API to terminate a specific connection. Server: Added an optional dead connection detection mechanism instead of simply disconnecting them after a specified duration of inactivity. Client: Discard all unsolicited responses except OpLock break. Bugfix: FormatException was thrown upon InvalidDataException in some cases. 1.3.4 - ShareAccess: Renamed enum members and added ShareAccess.None enum value. Minor logging improvements. SPNEGO: Minor improvements to SimpleProtectedNegotiationTokenInit implementation. SPNEGO: Added NegTokenInit2 implementation. Client: Login will now return SEC_E_INVALID_TOKEN if an invalid token is returned from the server instead of throwing NullReferenceException. Client: Fixed compatibility issue with Windows 8.1 / 10. Client: SMB2FileStore: SetFileInformation implementation. Win32Error: Added ERROR_NOT_SUPPORTED and ERROR_INVALID_LEVEL. RPC: FaultPDU parameterless constructor will now set Data to an empty byte array. RPC: RPCPDU PacketType variable is now protected. RPC: FaultPDU is now using FaultStatus enum. RPC: DataRepresentationFormat: Added constructor. Services: Minor improvements to ServerService and WorkstationService structures. Services: Added UnsupportedOpNumException. Services: ServerService, WorkstationService: Unsupported OpNums and Levels are now reported back to the client instead of NotImplementedException. 1.3.5 - FileStreamInformation: WriteBytes: Set the value NextEntryOffset for each FileStreamEntry. NTFileSystemAdapter: Set CasePreservedNames flag when querying FileFsAttributeInformation. NTFileSystemAdapter: ToNTStatus: Return STATUS_OBJECT_PATH_INVALID when Win32 error code is ERROR_BAD_PATHNAME. NTFileSystemAdapter: Bugfix: Do not make up a short name. NTFileSystemAdapter: Assume FileNotFoundException or DirectoryNotFoundException will be thrown if file does not exists. NTFileSystemAdapter: When querying FileAlternateNameInformation return STATUS_OBJECT_NAME_NOT_FOUND. NTFileSystemAdapter: Added support for alternate data streams. 1.3.6 - NTFileSystemAdapter: Do not handle unexpected IFileSystem exceptions. SPNEGO: Assume NegTokenInit2 SPNEGO extension was sent for server-initiated negotiation. NTStatus: Added STATUS_NOT_A_DIRECTORY. SMB1: TransactionQueryNamedPipeStateResponse: Added constructors. SMB1: TransactionQueryNamedPipeInfoResponse: Corrected implementation. Client: SMB1FileStore, SMB2FileStore: Implemented GetSecurityInformation. Minor improvements. 1.3.7 - Win32Error: Added ERROR_INVALID_NAME. NTFileSystemAdapter: ToNTStatus: Return STATUS_OBJECT_NAME_INVALID when Win32 error code is ERROR_INVALID_NAME. NTStatus: Added STATUS_NOT_A_REPARSE_POINT and STATUS_INFO_LENGTH_MISMATCH. SMB2: SMB2Command: Bugfix: ReadResponse returned ErrorResponse instead of QueryInfoResponse when status was STATUS_BUFFER_OVERFLOW. SMB2: SecurityMode: Added Flags attribute. Server: SMB1: Pass the Transaction2 MaxDataCount parameter to methods that retrieve FileInformation / FileSystemInformation. Server: SMB1: TransactionHelper: Return Transaction2Response instead of ErrorResponse when status is set to STATUS_BUFFER_OVERFLOW. Server: Bugfix: Do not return more bytes than requested when querying FileInformation / FileSystemInformation, report STATUS_BUFFER_OVERFLOW. Client: SMB2Client: Sign commands when required. 1.3.8 - Server: New connections can now be rejected using the ConnectionRequested event. NTStatus: Added STATUS_NOT_FOUND. NTDirectoryFileSystem: Bugfix: IO requests were not cancelled on Windows Vista and later. Moved Win32 specific functionality to separate project. Moved tests to separate project. 1.3.9 - Server: SMB1: Improved handling of transaction subcommand failures. NTDirectoryFileSystem: Bugfix: buffer size was reduced before subsequent calls to NtQueryDirectoryFile. 1.4.0 - Server: Bugfix: Collection was modified in a non thread-safe way. NTFileSystemAdapter: Return STATUS_END_OF_FILE when applicable. NTFileSystemAdapter: Minor logging improvement. Server: SMB2: Bugfix: Invalid change notify interim response was sent when the object store did not support change notifications. Client: Fixed a bug related to localhost communication. Client: NetBios: Added NameServiceClient. Client: Improved NetBios over TCP support. NetBios: Minor implementation improvements. 1.4.1 - Server: Enabled SMB 2.1 Large MTU support. Client: Enabled SMB 2.1 Large MTU support. Client: Disconnect connection when inappropriate NetBIOS session packet is received. SessionPacket: Added support for SMB 2.1 Large MTU. NBTConnectionReceiveBuffer: Added support for SMB 2.1 Large MTU. Added VS2019 solution and projects.