Ejemplo n.º 1
0
        private unsafe bool CheckForSufficientStack()
        {
            int num1 = StackGuard.s_pageSize;

            if (num1 == 0)
            {
                Win32Native.SYSTEM_INFO lpSystemInfo = new Win32Native.SYSTEM_INFO();
                Win32Native.GetSystemInfo(ref lpSystemInfo);
                StackGuard.s_pageSize = num1 = lpSystemInfo.dwPageSize;
            }
            Win32Native.MEMORY_BASIC_INFORMATION buffer = new Win32Native.MEMORY_BASIC_INFORMATION();
            UIntPtr num2   = new UIntPtr((void *)(&buffer - num1));
            ulong   uint64 = num2.ToUInt64();

            if ((long)this.m_lastKnownWatermark != 0L && uint64 > this.m_lastKnownWatermark)
            {
                return(true);
            }
            IntPtr num3 = (IntPtr)Win32Native.VirtualQuery(num2.ToPointer(), ref buffer, (UIntPtr)((ulong)sizeof(Win32Native.MEMORY_BASIC_INFORMATION)));

            if (uint64 - (UIntPtr)buffer.AllocationBase.ToUInt64() <= 65536UL)
            {
                return(false);
            }
            this.m_lastKnownWatermark = uint64;
            return(true);
        }
        private unsafe bool CheckForSufficientStack()
        {
            if (s_pageSize == 0)
            {
                Win32Native.SYSTEM_INFO lpSystemInfo = new Win32Native.SYSTEM_INFO();
                Win32Native.GetSystemInfo(ref lpSystemInfo);
                s_pageSize = lpSystemInfo.dwPageSize;
            }
            Win32Native.MEMORY_BASIC_INFORMATION buffer = new Win32Native.MEMORY_BASIC_INFORMATION();
            UIntPtr ptr = new UIntPtr((void *)(&buffer - s_pageSize));
            ulong   num = ptr.ToUInt64();

            if ((this.m_lastKnownWatermark != 0L) && (num > this.m_lastKnownWatermark))
            {
                return(true);
            }
            Win32Native.VirtualQuery(ptr.ToPointer(), ref buffer, new IntPtr(sizeof(Win32Native.MEMORY_BASIC_INFORMATION)));
            UIntPtr allocationBase = (UIntPtr)buffer.AllocationBase;

            if ((num - allocationBase.ToUInt64()) > 0x10000L)
            {
                this.m_lastKnownWatermark = num;
                return(true);
            }
            return(false);
        }
        private unsafe bool CheckForSufficientStack()
        {
            int num = StackGuard.s_pageSize;

            if (num == 0)
            {
                Win32Native.SYSTEM_INFO system_INFO = default(Win32Native.SYSTEM_INFO);
                Win32Native.GetSystemInfo(ref system_INFO);
                num = (StackGuard.s_pageSize = system_INFO.dwPageSize);
            }
            Win32Native.MEMORY_BASIC_INFORMATION memory_BASIC_INFORMATION = default(Win32Native.MEMORY_BASIC_INFORMATION);
            UIntPtr uintPtr = new UIntPtr((void *)((byte *)(&memory_BASIC_INFORMATION) - (IntPtr)num * (IntPtr)sizeof(Win32Native.MEMORY_BASIC_INFORMATION)));
            ulong   num2    = uintPtr.ToUInt64();

            if (this.m_lastKnownWatermark != 0UL && num2 > this.m_lastKnownWatermark)
            {
                return(true);
            }
            Win32Native.VirtualQuery(uintPtr.ToPointer(), ref memory_BASIC_INFORMATION, (UIntPtr)((ulong)((long)sizeof(Win32Native.MEMORY_BASIC_INFORMATION))));
            if (num2 - ((UIntPtr)memory_BASIC_INFORMATION.AllocationBase).ToUInt64() > 65536UL)
            {
                this.m_lastKnownWatermark = num2;
                return(true);
            }
            return(false);
        }