예제 #1
0
        public static HeapInfo[] EnumHeaps(int pid)
        {
            using (var handle = Win32.CreateToolhelp32Snapshot(CreateToolhelpSnapshotFlags.SnapHeapList, pid)) {
                if (handle.DangerousGetHandle() == Win32.InvalidFileHandle)
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }

                var heaps = new List <HeapInfo>(8);
                var hi    = new HeapList();
                hi.Init();

                if (!Win32.Heap32ListFirst(handle, ref hi))
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }

                do
                {
                    var heapInfo = new HeapInfo(hi, pid);
                    heaps.Add(heapInfo);
                } while (Win32.Heap32ListNext(handle, ref hi));

                return(heaps.ToArray());
            }
        }
예제 #2
0
 internal static extern bool Heap32ListNext(SafeFileHandle hSnapshot, ref HeapList list);
예제 #3
0
 internal HeapInfo(HeapList heap, int pid)
 {
     _heap = heap;
     _pid  = pid;
 }