[System.Security.SecurityCritical] // auto-generated private static unsafe ulong MemFreeAfterAddress(void * address, ulong size) { if (size >= TopOfMemory) return 0; ulong largestFreeRegion = 0; Win32Native.MEMORY_BASIC_INFORMATION memInfo = new Win32Native.MEMORY_BASIC_INFORMATION(); UIntPtr sizeOfMemInfo = (UIntPtr) Marshal.SizeOf(memInfo); while (((ulong)address) + size < TopOfMemory) { UIntPtr r = Win32Native.VirtualQuery(address, ref memInfo, sizeOfMemInfo); if (r == UIntPtr.Zero) __Error.WinIOError(); ulong regionSize = memInfo.RegionSize.ToUInt64(); if (memInfo.State == Win32Native.MEM_FREE) { if (regionSize >= size) return regionSize; else largestFreeRegion = Math.Max(largestFreeRegion, regionSize); } address = (void *) ((ulong) address + regionSize); } return largestFreeRegion; }
private static unsafe ulong MemFreeAfterAddress(void* address, ulong size) { if (size >= TopOfMemory) { return 0L; } ulong num = 0L; Win32Native.MEMORY_BASIC_INFORMATION structure = new Win32Native.MEMORY_BASIC_INFORMATION(); IntPtr sizeOfBuffer = (IntPtr) Marshal.SizeOf(structure); while ((((ulong) address) + size) < TopOfMemory) { if (Win32Native.VirtualQuery(address, ref structure, sizeOfBuffer) == IntPtr.Zero) { __Error.WinIOError(); } ulong num2 = structure.RegionSize.ToUInt64(); if (structure.State == 0x10000) { if (num2 >= size) { return num2; } num = Math.Max(num, num2); } address = (void*) (((ulong) address) + num2); } return num; }