Ejemplo n.º 1
0
        private static void FireWinSQMEvent(
            WinSQMWrapper.EventDescriptor eventDescriptor,
            uint dataPointID,
            uint dataPointValue)
        {
            Guid empty = Guid.Empty;

            if (!WinSQMWrapper.WinSqmEventEnabled(ref eventDescriptor, ref empty))
            {
                return;
            }
            IntPtr num1 = Marshal.AllocHGlobal(Marshal.SizeOf((object)WinSQMWrapper.WINDOWS_SQM_GLOBALSESSION));
            IntPtr num2 = Marshal.AllocHGlobal(4);
            IntPtr num3 = Marshal.AllocHGlobal(4);

            try
            {
                Marshal.StructureToPtr((object)WinSQMWrapper.WINDOWS_SQM_GLOBALSESSION, num1, true);
                Marshal.StructureToPtr((object)dataPointID, num2, true);
                Marshal.StructureToPtr((object)dataPointValue, num3, true);
                WinSQMWrapper.FireWinSQMEvent(eventDescriptor, num1, num2, num3);
            }
            finally
            {
                Marshal.FreeHGlobal(num1);
                Marshal.FreeHGlobal(num2);
                Marshal.FreeHGlobal(num3);
            }
        }
Ejemplo n.º 2
0
        public static void NoteRunspaceEnd(Guid rsInstanceId)
        {
            if (!PSSQMAPI.isWinSQMEnabled)
            {
                return;
            }
            long ticks1 = DateTime.Now.Ticks;
            long num    = ticks1;

            lock (PSSQMAPI.syncObject)
            {
                if (!PSSQMAPI.runspaceDurationData.ContainsKey(rsInstanceId))
                {
                    return;
                }
                num = PSSQMAPI.runspaceDurationData[rsInstanceId];
                PSSQMAPI.runspaceDurationData.Remove(rsInstanceId);
            }
            try
            {
                long ticks2 = ticks1 - num;
                if (ticks2 < PSSQMAPI.timeValueThreshold)
                {
                    return;
                }
                WinSQMWrapper.WinSqmAddToStream(3088U, new TimeSpan(ticks2).TotalMinutes.ToString((IFormatProvider)CultureInfo.InvariantCulture));
            }
            catch (Exception ex)
            {
                CommandProcessorBase.CheckForSevereException(ex);
            }
        }
Ejemplo n.º 3
0
        private static void FireWinSQMEvent(
            WinSQMWrapper.EventDescriptor eventDescriptor,
            Dictionary <uint, uint> dataToWrite)
        {
            Guid empty = Guid.Empty;

            if (!WinSQMWrapper.WinSqmEventEnabled(ref eventDescriptor, ref empty))
            {
                return;
            }
            IntPtr num1 = Marshal.AllocHGlobal(Marshal.SizeOf((object)WinSQMWrapper.WINDOWS_SQM_GLOBALSESSION));
            IntPtr num2 = Marshal.AllocHGlobal(4);
            IntPtr num3 = Marshal.AllocHGlobal(4);

            try
            {
                Marshal.StructureToPtr((object)WinSQMWrapper.WINDOWS_SQM_GLOBALSESSION, num1, true);
                foreach (uint key in dataToWrite.Keys)
                {
                    uint num4 = dataToWrite[key];
                    Marshal.StructureToPtr((object)key, num2, true);
                    Marshal.StructureToPtr((object)num4, num3, true);
                    WinSQMWrapper.FireWinSQMEvent(eventDescriptor, num1, num2, num3);
                }
            }
            finally
            {
                Marshal.FreeHGlobal(num1);
                Marshal.FreeHGlobal(num2);
                Marshal.FreeHGlobal(num3);
            }
        }
Ejemplo n.º 4
0
 public static void WinSqmAddToStream(uint dataPointID, string stringData)
 {
     WinSQMWrapper.SqmStreamEntry[] streamEntries = new WinSQMWrapper.SqmStreamEntry[1]
     {
         WinSQMWrapper.SqmStreamEntry.CreateStringSqmStreamEntry(stringData)
     };
     WinSQMWrapper.WinSqmAddToStream(WinSQMWrapper.HGLOBALSESSION, dataPointID, streamEntries.Length, streamEntries);
 }
Ejemplo n.º 5
0
 public static void WinSqmAddToStream(uint dataPointID, string stringData, uint numericalData)
 {
     WinSQMWrapper.SqmStreamEntry[] streamEntries = new WinSQMWrapper.SqmStreamEntry[2]
     {
         WinSQMWrapper.SqmStreamEntry.CreateStringSqmStreamEntry(stringData),
         WinSQMWrapper.SqmStreamEntry.CreateStringSqmStreamEntry(numericalData.ToString((IFormatProvider)CultureInfo.InvariantCulture))
     };
     WinSQMWrapper.WinSqmAddToStream(WinSQMWrapper.HGLOBALSESSION, dataPointID, streamEntries.Length, streamEntries);
 }
Ejemplo n.º 6
0
 public static bool IsWinSqmOptedIn()
 {
     try
     {
         return(WinSQMWrapper.WinSqmIsOptedIn());
     }
     catch (Exception ex)
     {
         CommandProcessorBase.CheckForSevereException(ex);
     }
     return(false);
 }
Ejemplo n.º 7
0
 private static void FireWinSQMEvent(
     WinSQMWrapper.EventDescriptor eventDescriptor,
     IntPtr sessionHandle,
     IntPtr dataPointIDHandle,
     IntPtr dataValueHandle)
 {
     WinSQMWrapper.EventDataDescriptor[] userData = new WinSQMWrapper.EventDataDescriptor[3]
     {
         new WinSQMWrapper.EventDataDescriptor(sessionHandle, Marshal.SizeOf((object)WinSQMWrapper.WINDOWS_SQM_GLOBALSESSION)),
         new WinSQMWrapper.EventDataDescriptor(dataPointIDHandle, 4),
         new WinSQMWrapper.EventDataDescriptor(dataValueHandle, 4)
     };
     int num = (int)WinSQMWrapper.WinSqmEventWrite(ref eventDescriptor, userData.Length, userData);
 }
Ejemplo n.º 8
0
 static PSSQMAPI()
 {
     if (!WinSQMWrapper.IsWinSqmOptedIn())
     {
         return;
     }
     PSSQMAPI.dataValueCache              = new Dictionary <uint, uint>();
     PSSQMAPI.cmdletData                  = new Dictionary <string, uint>((IEqualityComparer <string>)StringComparer.OrdinalIgnoreCase);
     PSSQMAPI.runspaceDurationData        = new Dictionary <Guid, long>();
     PSSQMAPI.timeValueThreshold          = 600000000L;
     AppDomain.CurrentDomain.ProcessExit += new EventHandler(PSSQMAPI.CurrentDomain_ProcessExit);
     PSSQMAPI.startedAtTick               = DateTime.Now.Ticks;
     PSSQMAPI.isWinSQMEnabled             = true;
 }
Ejemplo n.º 9
0
 private static void FlushDataSuppressExceptions()
 {
     try
     {
         uint num = 3086;
         if (PSSQMAPI.dataValueCache.ContainsKey(num))
         {
             WinSQMWrapper.WinSqmSet(num, PSSQMAPI.dataValueCache[num]);
             PSSQMAPI.dataValueCache.Remove(num);
         }
         WinSQMWrapper.WinSqmIncrement(PSSQMAPI.dataValueCache);
         PSSQMAPI.dataValueCache.Clear();
         foreach (string key in PSSQMAPI.cmdletData.Keys)
         {
             WinSQMWrapper.WinSqmAddToStream(3079U, key, PSSQMAPI.cmdletData[key]);
         }
         PSSQMAPI.cmdletData.Clear();
     }
     catch (Exception ex)
     {
         CommandProcessorBase.CheckForSevereException(ex);
     }
 }
Ejemplo n.º 10
0
 public static void WinSqmSet(uint dataPointID, uint dataPointValue) => WinSQMWrapper.FireWinSQMEvent(new WinSQMWrapper.EventDescriptor((ushort)5, (byte)0, (byte)0, (byte)4, (byte)0, (ushort)0, 2251799813685248UL), dataPointID, dataPointValue);
Ejemplo n.º 11
0
 public static void WinSqmIncrement(Dictionary <uint, uint> dataToWrite) => WinSQMWrapper.FireWinSQMEvent(new WinSQMWrapper.EventDescriptor((ushort)6, (byte)0, (byte)0, (byte)4, (byte)2, (ushort)0, 2251799813685248UL), dataToWrite);
Ejemplo n.º 12
0
 public static void WinSqmIncrement(uint dataPointID, uint incAmount) => WinSQMWrapper.FireWinSQMEvent(new WinSQMWrapper.EventDescriptor((ushort)6, (byte)0, (byte)0, (byte)4, (byte)2, (ushort)0, 2251799813685248UL), dataPointID, incAmount);