internal static ServiceTriggerInformation GetTriggerInformation(SERVICE_TRIGGER trigger)
        {
            switch (trigger.dwTriggerType)
            {
            case ServiceTriggerType.Custom:
                return(new EtwServiceTriggerInformation(trigger));

            case ServiceTriggerType.CustomSystemStateChange:
                return(new WnfServiceTriggerInformation(trigger));

            case ServiceTriggerType.NetworkEndpoint:
            {
                Guid sub_type = trigger.GetSubType();
                if (sub_type == NAMED_PIPE_EVENT_GUID)
                {
                    return(new NamedPipeServiceTriggerInformation(trigger));
                }
                else if (sub_type == RPC_INTERFACE_EVENT_GUID)
                {
                    return(new RpcInterfaceServiceTriggerInformation(trigger));
                }
            }
            break;

            case ServiceTriggerType.FirewallPortEvent:
                return(new FirewallServiceTriggerInformation(trigger));
            }

            return(new ServiceTriggerInformation(trigger));
        }
Ejemplo n.º 2
0
        static IEnumerable <ServiceTriggerInformation> GetTriggersForService(SafeServiceHandle service)
        {
            List <ServiceTriggerInformation> triggers = new List <ServiceTriggerInformation>();

            using (var buf = new SafeStructureInOutBuffer <SERVICE_TRIGGER_INFO>(8192, false))
            {
                int required = 0;
                if (!QueryServiceConfig2(service, SERVICE_CONFIG_TRIGGER_INFO, buf, 8192, out required))
                {
                    return(triggers.AsReadOnly());
                }

                SERVICE_TRIGGER_INFO trigger_info = buf.Result;
                if (trigger_info.cTriggers == 0)
                {
                    return(triggers.AsReadOnly());
                }

                SERVICE_TRIGGER[] trigger_arr;
                using (SafeHGlobalBuffer trigger_buffer = new SafeHGlobalBuffer(trigger_info.pTriggers, trigger_info.cTriggers * Marshal.SizeOf(typeof(SERVICE_TRIGGER)), false))
                {
                    trigger_arr = new SERVICE_TRIGGER[trigger_info.cTriggers];
                    trigger_buffer.ReadArray(0, trigger_arr, 0, trigger_arr.Length);
                }

                for (int i = 0; i < trigger_arr.Length; ++i)
                {
                    triggers.Add(new ServiceTriggerInformation(trigger_arr[i]));
                }

                return(triggers.AsReadOnly());
            }
        }
 internal static ServiceTriggerInformation GetTriggerInformation(SERVICE_TRIGGER trigger)
 {
     if (trigger.dwTriggerType == ServiceTriggerType.Custom)
     {
         return(new EtwServiceTriggerInformation(trigger));
     }
     return(new ServiceTriggerInformation(trigger));
 }
 internal static ServiceTriggerInformation GetTriggerInformation(SERVICE_TRIGGER trigger)
 {
     if (trigger.dwTriggerType == ServiceTriggerType.Custom)
     {
         return(new EtwServiceTriggerInformation(trigger));
     }
     else if (trigger.dwTriggerType == ServiceTriggerType.CustomSystemStateChange)
     {
         return(new WnfServiceTriggerInformation(trigger));
     }
     return(new ServiceTriggerInformation(trigger));
 }
Ejemplo n.º 5
0
        internal WnfServiceTriggerInformation(SERVICE_TRIGGER trigger)
            : base(trigger)
        {
            var data = CustomData.FirstOrDefault();

            if (data?.RawData?.Length != 8)
            {
                return;
            }

            Name = NtWnf.Open(BitConverter.ToUInt64(data.RawData, 0), true, false).GetResultOrDefault();
        }
        internal EtwServiceTriggerInformation(SERVICE_TRIGGER trigger)
            : base(trigger)
        {
            var sd = EventTracing.QueryTraceSecurity(SubType, false);

            if (sd.IsSuccess)
            {
                SecurityDescriptor = sd.Result;
            }
            else
            {
                SecurityDescriptor = new SecurityDescriptor();
            }
        }
Ejemplo n.º 7
0
        internal ServiceTriggerInformation(SERVICE_TRIGGER trigger)
        {
            TriggerType        = trigger.dwTriggerType;
            Action             = trigger.dwAction;
            SubType            = trigger.GetSubType();
            SubTypeDescription = GetSubTypeDescription();

            List <ServiceTriggerCustomData> data = new List <ServiceTriggerCustomData>();

            if (trigger.pDataItems != IntPtr.Zero && trigger.cDataItems > 0)
            {
                SERVICE_TRIGGER_SPECIFIC_DATA_ITEM[] data_items;
                ReadArray(trigger.pDataItems, trigger.cDataItems, out data_items);
                for (int i = 0; i < data_items.Length; ++i)
                {
                    data.Add(new ServiceTriggerCustomData(data_items[i]));
                }
            }
            CustomData = data.AsReadOnly();
        }