none
AccessViolation exception when running the below code RRS feed

  • Question

  • I tried to do this code in C#:

    http://msdn.microsoft.com/en-us/library/windows/desktop/dd299432(v=vs.85).aspx

    static Boolean ListHeap(uint dwPID)
            {
                HEAPLIST32 hl=new HEAPLIST32();
                IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
                IntPtr hHeapSnap = INVALID_HANDLE_VALUE;
               
                uint TH32CS_SNAPHEAPLIST = 0x00000001;
                uint TH32CS_SNAPPROCESS = 0x00000002;
                uint TH32CS_SNAPTHREAD = 0x00000004;
                uint TH32CS_SNAPMODULE = 0x00000008;
                uint TH32CS_SNAPMODULE32 = 0x00000010;
                uint TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST |
                                                     TH32CS_SNAPPROCESS |
                                                     TH32CS_SNAPTHREAD |
                                                     TH32CS_SNAPMODULE);
                hHeapSnap = CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, dwPID);
                if (hHeapSnap == INVALID_HANDLE_VALUE)
                    return false;
                hl.dwSize = (uint)Marshal.SizeOf(typeof(HEAPENTRY32));
                if (!Heap32ListFirst(hHeapSnap, ref hl))
                {
               
                do
                {
                    UIntPtr x=(UIntPtr)hl.th32HeapID;
                    HEAPENTRY32 he=new HEAPENTRY32();
                    IntPtr he1 = INVALID_HANDLE_VALUE;
                    try
                    {
                        ZeroMemory(he1, (IntPtr)Marshal.SizeOf(typeof(HEAPENTRY32)));
                    }
                    catch (AccessViolationException ex)
                    {

                    }
                    he.dwSize=(uint)Marshal.SizeOf(typeof(HEAPENTRY32));
                    if(Heap32First(ref he,dwPID,x))
                    {
                        Console.WriteLine("\n Heap ID ",hl.th32HeapID);
                    do{
                        Console.WriteLine("Block Size ",he.dwBlockSize);
                        he.dwSize=(uint)Marshal.SizeOf(typeof(HEAPENTRY32));
                    } while(Heap32Next(he1,ref he));
                    }
                    hl.dwSize=(uint)Marshal.SizeOf(typeof(HEAPLIST32));
                } while(Heap32ListNext(hHeapSnap,ref hl));
                }
                    else
                        Console.WriteLine("CAnnot list heap");

                CloseHandle(hHeapSnap);
                return true;

            }

    In C++ they have used HeapEntry32 objec. But it is not an IntPtr thing for me to use it. So I created an IntPtr variable and used it. Now it gives an access violation exception. Please advice.


    mayooran99

    Friday, April 4, 2014 12:05 AM

Answers