Esempio n. 1
0
        public void EnumLocks(DebugEnumLocksDelegate callback)
        {
            var debugInfo = this.GetDebugInformation();

            if (debugInfo.Locks == IntPtr.Zero)
                throw new InvalidOperationException("Lock information does not exist.");

            MemoryRegion locksInfo = new MemoryRegion(debugInfo.Locks);
            var locks = locksInfo.ReadStruct<RtlProcessLocks>();

            for (int i = 0; i < locks.NumberOfLocks; i++)
            {
                var lock_ = locksInfo.ReadStruct<RtlProcessLockInformation>(sizeof(int), i);

                if (!callback(new LockInformation(lock_)))
                    break;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Enumerates lock information.
        /// </summary>
        /// <param name="callback">The callback for the enumeration.</param>
        public void EnumLocks(DebugEnumLocksDelegate callback)
        {
            var debugInfo = this.GetDebugInformation();

            if (debugInfo.Locks == IntPtr.Zero)
            {
                throw new InvalidOperationException("Lock information does not exist.");
            }

            MemoryRegion locksInfo = new MemoryRegion(debugInfo.Locks);
            var          locks     = locksInfo.ReadStruct <RtlProcessLocks>();

            for (int i = 0; i < locks.NumberOfLocks; i++)
            {
                var lock_ = locksInfo.ReadStruct <RtlProcessLockInformation>(sizeof(int), RtlProcessLockInformation.SizeOf, i);

                if (!callback(new LockInformation(lock_)))
                {
                    break;
                }
            }
        }