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; } }
/// <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; } } }