public NTTransactNotifyChangeRequest(byte[] setup) : base() { CompletionFilter = (CompletionFilter)LittleEndianConverter.ToUInt32(setup, 0); FID = LittleEndianConverter.ToUInt16(setup, 4); WatchTree = (ByteReader.ReadByte(setup, 6) != 0); Reserved = ByteReader.ReadByte(setup, 7); }
static FilterSet() { var mapBuilder = ImmutableDictionary.CreateBuilder <string, FilterWithMask>(); var arrayBuilder = ImmutableArray.CreateBuilder <FilterWithMask>(); var previousMask = 0; NamespaceFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Namespaces, 'n', WellKnownTags.Namespace); ClassFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Classes, 'c', WellKnownTags.Class); ModuleFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Modules, 'u', WellKnownTags.Module); StructureFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Structures, 's', WellKnownTags.Structure); InterfaceFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Interfaces, 'i', WellKnownTags.Interface); EnumFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Enums, 'e', WellKnownTags.Enum); DelegateFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Delegates, 'd', WellKnownTags.Delegate); ConstantFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Constants, 'o', WellKnownTags.Constant); FieldFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Fields, 'f', WellKnownTags.Field); EventFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Events, 'v', WellKnownTags.Event); PropertyFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Properties, 'p', WellKnownTags.Property); MethodFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Methods, 'm', WellKnownTags.Method); ExtensionMethodFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Extension_methods, 'x', WellKnownTags.ExtensionMethod); OperatorFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Operators, 'r', WellKnownTags.Operator); LocalAndParameterFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Locals_and_parameters, 'l', WellKnownTags.Local, WellKnownTags.Parameter); KeywordFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Keywords, 'k', WellKnownTags.Keyword); SnippetFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Snippets, 't', WellKnownTags.Snippet); TargetTypedFilter = CreateCompletionFilterAndAddToBuilder(FeaturesResources.Target_type_matches, 'j', WellKnownTags.TargetTypeMatch); s_filterMap = mapBuilder.ToImmutable(); s_filters = arrayBuilder.ToImmutable(); s_expanderMask = BitVector32.CreateMask(previousMask); var addImageId = Shared.Extensions.GlyphExtensions.GetImageCatalogImageId(KnownImageIds.ExpandScope); Expander = new CompletionExpander( EditorFeaturesResources.Expander_display_text, accessKey: "a", new ImageElement(addImageId, EditorFeaturesResources.Expander_image_element)); CompletionFilter CreateCompletionFilterAndAddToBuilder(string displayText, char accessKey, params string[] tags) { var filter = CreateCompletionFilter(displayText, tags, accessKey); previousMask = BitVector32.CreateMask(previousMask); var filterWithMask = new FilterWithMask(filter, previousMask); arrayBuilder.Add(filterWithMask); foreach (var tag in tags) { mapBuilder.Add(tag, filterWithMask); } return(filter); } }
public FilterWithMask(CompletionFilter filter, int mask) { Filter = filter; Mask = mask; }
/// <summary> /// to create a NtTransactNotifyChange request packet. /// </summary> /// <param name="uid">This field SHOULD identify the authenticated instance of the user.</param> /// <param name="treeId">This field identifies the subdirectory (or tree) on the server that the client is /// accessing.</param> /// <param name="fid">MUST contain a valid FID obtained from a previously successful SMB open command.</param> /// <param name="filter">Specify the types of operations to monitor.</param> /// <param name="watchTree">BOOLEAN If all subdirectories are to be watched, then set this to TRUE; otherwise, /// FALSE.</param> /// <returns>a NtTransactNotifyChange request packet</returns> /// <exception cref="System.NullReferenceException">There is no connection in context. </exception> public SmbNtTransactNotifyChangeRequestPacket CreateNtTransactNotifyChangeRequest( ushort uid, ushort treeId, ushort fid, CompletionFilter filter, bool watchTree) { return this.CreateNtTransactNotifyChangeRequest(this.Context.GetMessageId(this.connectionId), uid, treeId, this.defaultParameters.Flag, this.defaultParameters.Flag2, this.defaultParameters.MaxSetupCount, this.defaultParameters.MaxParameterCount, this.defaultParameters.MaxDataCount, fid, filter, watchTree); }
/// <summary> /// to create a NtTransactNotifyChange request packet. /// </summary> /// <param name="messageId">This field SHOULD be the multiplex ID that is used to associate a response with a /// request.</param> /// <param name="uid">This field SHOULD identify the authenticated instance of the user.</param> /// <param name="treeId">This field identifies the subdirectory (or tree) on the server that the client is /// accessing.</param> /// <param name="flags">An 8-bit field of 1-bit flags describing various features in effect for the /// message</param> /// <param name="flags2">A 16-bit field of 1-bit flags that represent various features in effect for the /// message. Unspecified bits are reserved and MUST be zero.</param> /// <param name="maxParameterCount">The maximum number of parameter bytes that the client will accept in the /// transaction reply. The server MUST NOT return more than this number of parameter bytes.</param> /// <param name="maxDataCount">The maximum number of data bytes that the client will accept in the transaction /// reply. The server MUST NOT return more than this number of data bytes.</param> /// <param name="maxSetupCount">Maximum number of setup bytes that the client will accept in the transaction /// reply. The server MUST NOT return more than this number of setup bytes</param> /// <param name="fid">MUST contain a valid FID obtained from a previously successful SMB open command.</param> /// <param name="filter">Specify the types of operations to monitor.</param> /// <param name="watchTree">BOOLEAN If all subdirectories are to be watched, then set this to TRUE; otherwise, /// FALSE.</param> /// <returns>a NtTransactNotifyChange request packet</returns> public SmbNtTransactNotifyChangeRequestPacket CreateNtTransactNotifyChangeRequest( ushort messageId, ushort uid, ushort treeId, SmbFlags flags, SmbFlags2 flags2, byte maxSetupCount, uint maxParameterCount, uint maxDataCount, ushort fid, CompletionFilter filter, bool watchTree) { SmbNtTransactNotifyChangeRequestPacket packet = new SmbNtTransactNotifyChangeRequestPacket(); packet.SmbHeader = CifsMessageUtils.CreateSmbHeader(SmbCommand.SMB_COM_NT_TRANSACT, messageId, uid, treeId, flags, flags2); // Set Smb_Parameters SMB_COM_NT_TRANSACT_Request_SMB_Parameters smbParameters = new SMB_COM_NT_TRANSACT_Request_SMB_Parameters(); smbParameters.MaxSetupCount = maxSetupCount; smbParameters.MaxParameterCount = maxParameterCount; smbParameters.MaxDataCount = maxDataCount; smbParameters.SetupCount = 4; // the cout of Setup is 4. smbParameters.Function = NtTransSubCommand.NT_TRANSACT_NOTIFY_CHANGE; NT_TRANSACT_NOTIFY_SETUP setupStruct = new NT_TRANSACT_NOTIFY_SETUP(); setupStruct.filter = filter; setupStruct.Fid = fid; setupStruct.WatchTree = (byte)(watchTree ? 1 : 0); smbParameters.Setup = CifsMessageUtils.ToTypeArray<ushort>(CifsMessageUtils.ToBytes<NT_TRANSACT_NOTIFY_SETUP >(setupStruct)); smbParameters.WordCount = (byte)(CifsMessageUtils.GetSize<SMB_COM_NT_TRANSACT_Request_SMB_Parameters>( smbParameters) / NumBytesOfWord); // Set Smb_Data SMB_COM_NT_TRANSACT_Request_SMB_Data smbData = new SMB_COM_NT_TRANSACT_Request_SMB_Data(); packet.SmbParameters = smbParameters; packet.SmbData = smbData; packet.UpdateCountAndOffset(); return packet; }