コード例 #1
0
        public object MarshalNativeToManaged(IntPtr pNativeData)
        {
            IEnumVARIANT      ienumvariant = (IEnumVARIANT)Marshal.GetObjectForIUnknown(pNativeData);
            VARIANTEnumerator e            = new VARIANTEnumerator(ienumvariant);

            return(e);
        }
コード例 #2
0
        public ComWrapperEnumerator(object source, Func <object, TWrapperItem> itemWrapper)
        {
            _itemWrapper = itemWrapper;

            if (source != null)
            {
                _enumeratorRCW = (IEnumVARIANT)IDispatchHelper.PropertyGet_NoArgs((IDispatch)source, (int)IDispatchHelper.StandardDispIds.DISPID_ENUM);
                ((IEnumerator)this).Reset();  // precaution
            }
        }
コード例 #3
0
        public static IEnumerable <T> ToEnumerable <T>(this IEnumVARIANT enumVariant, int count)
        {
            enumVariant.Reset();

            var buffer = new object[count];
            var bufferLengthPointer = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(int)));

            enumVariant.Next(buffer.Length, buffer, bufferLengthPointer);
            var bufferLength = Marshal.ReadInt32(bufferLengthPointer);

            Marshal.FreeCoTaskMem(bufferLengthPointer);

            for (var i = 0; i < Math.Min(bufferLength, count); i++)
            {
                yield return((T)buffer[i]);
            }
        }
        private IEnumerable<FirewallRulePayload> GetPayloads()
        {
            INetFwRules rules = _firewallPolicy.Rules;

            int count = rules.Count;
            IEnumVARIANT enumVARIANT = rules.get__NewEnum();
            object[] obj = new object[1];

            for (int i = 0; i < count; i++)
            {
                if (enumVARIANT.Next(1, obj, IntPtr.Zero) == 0)
                {
                    var rule = (INetFwRule)obj[0];

                    if (!ShouldHandleRule(rule))
                    {
                        continue;
                    }

                    FirewallRulePayload payload = new FirewallRulePayload();
                    payload.Action = rule.Action.ToIoTValue();
                    payload.Direction = rule.Direction.ToIoTValue();
                    payload.Enabled = rule.Enabled;
                    payload.Application = rule.ApplicationName;
                    payload.SourceAddress = rule.Direction == NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN ? rule.RemoteAddresses : rule.LocalAddresses;
                    payload.SourcePort = rule.Direction == NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN ? rule.RemotePorts : rule.LocalPorts;
                    payload.DestinationAddress = rule.Direction == NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN ? rule.LocalAddresses : rule.RemoteAddresses;
                    payload.DestinationPort = rule.Direction == NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN ? rule.LocalPorts : rule.RemotePorts;
                    payload.Protocol = ((FirewallRuleProtocol)rule.Protocol).ToString();
                    payload.Priority = null;
                    payload.ExtraDetails = new Dictionary<string, string>() { { RuleNameExtraDetailsKey, rule.Name } };

                    yield return payload;
                }
            }
        }
コード例 #5
0
 public EnumeratorViewOfEnumVariant(IEnumVARIANT enumVariantObject)
 {
     _enumVariantObject = enumVariantObject;
     _fetchedLastObject = false;
     _current           = null;
 }
コード例 #6
0
 public EnumeratorWrapper(IEnumVARIANT enumVariant)
 {
     this.enumVariant = enumVariant;
 }
コード例 #7
0
 public ComEnumerator(IEnumVARIANT enumVariant, Func <TSource, TTarget> resolveFunction)
 {
     _enumVariant         = enumVariant;
     _resolveFunction     = resolveFunction;
     _bufferLengthPointer = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(int)));
 }
 public VARIANTEnumerator (IEnumVARIANT com_enum)
 {
     this.com_enum = com_enum;
 }
コード例 #9
0
			public VARIANTEnumerator (IEnumVARIANT com_enum) {
				this.com_enum = com_enum;
			}