Exemple #1
0
        private bool QueryMemoryBasicInformation(IntPtr handle, IntPtr current_address, ref MemoryBasicInformation memoryBasicInformation)
        {
            if (isX64())
            {
                MEMORY_BASIC_INFORMATION_X64 mem_basic_info = new MEMORY_BASIC_INFORMATION_X64();
                int mem_info_size = Marshal.SizeOf <MEMORY_BASIC_INFORMATION_X64>();
                int size          = VirtualQueryEx_X64(handle, current_address, out mem_basic_info, (uint)mem_info_size);

                if (size != mem_info_size)
                {
                    Logger.Error($"(X64)Error Code:0x{Marshal.GetLastWin32Error():X8}");
                    return(false);
                }

                memoryBasicInformation.RegionSize        = mem_basic_info.RegionSize;
                memoryBasicInformation.BaseAddress       = mem_basic_info.BaseAddress;
                memoryBasicInformation.AllocationProtect = mem_basic_info.AllocationProtect;
                memoryBasicInformation.AllocationBase    = mem_basic_info.AllocationBase;
                memoryBasicInformation.Type    = mem_basic_info.Type;
                memoryBasicInformation.State   = mem_basic_info.State;
                memoryBasicInformation.Protect = mem_basic_info.Protect;
                return(true);
            }
            else
            {
                MEMORY_BASIC_INFORMATION_X86 mem_basic_info = new MEMORY_BASIC_INFORMATION_X86();
                int mem_info_size = Marshal.SizeOf <MEMORY_BASIC_INFORMATION_X86>();
                int size          = VirtualQueryEx_X86(handle, current_address, out mem_basic_info, (uint)mem_info_size);

                if (size != mem_info_size)
                {
                    Logger.Error($"(X86)Error Code:0x{Marshal.GetLastWin32Error():X8}");
                    return(false);
                }

                memoryBasicInformation.RegionSize        = mem_basic_info.RegionSize;
                memoryBasicInformation.BaseAddress       = mem_basic_info.BaseAddress;
                memoryBasicInformation.AllocationProtect = mem_basic_info.AllocationProtect;
                memoryBasicInformation.AllocationBase    = mem_basic_info.AllocationBase;
                memoryBasicInformation.Type    = mem_basic_info.Type;
                memoryBasicInformation.State   = mem_basic_info.State;
                memoryBasicInformation.Protect = mem_basic_info.Protect;
                return(true);
            }
        }
Exemple #2
0
 private static extern int VirtualQueryEx_X86(IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION_X86 lpBuffer, uint dwLength);