private static bool MapAndLoad()

in BoostTestAdapter/Utility/DebugHelperNative.cs [289:351]


        private static bool MapAndLoad(string imageName, out NativeMethods.LoadedImage loadedImage)
        {
            loadedImage = new NativeMethods.LoadedImage();

            long fileSize;
            IntPtr mapAddr;
            using (var hFile = NativeMethods.CreateFile(imageName, NativeMethods.GENERIC_READ,
                NativeMethods.FILE_SHARE_READ, IntPtr.Zero, NativeMethods.OPEN_EXISTING, 0, IntPtr.Zero))
            {
                if (hFile.IsInvalid)
                    return false;

                if (!NativeMethods.GetFileSizeEx(hFile, out fileSize))
                    return false;

                using (var hMapping = NativeMethods.CreateFileMapping(hFile, IntPtr.Zero, NativeMethods.PAGE_READONLY, 0, 0, null))
                {
                    if (hMapping.IsInvalid)
                        return false;

                    mapAddr = NativeMethods.MapViewOfFile(hMapping, NativeMethods.FILE_MAP_READ, 0, 0, UIntPtr.Zero);
                    if (mapAddr == IntPtr.Zero)
                        return false;
                }
            }

            unsafe
            {
                if (fileSize < Marshal.SizeOf<NativeMethods.IMAGE_DOS_HEADER>())
                    return false;

                var dosHeader = (NativeMethods.IMAGE_DOS_HEADER*)mapAddr;
                NativeMethods.IMAGE_NT_HEADERS* rawFileHeader;
                if (dosHeader->e_magic == NativeMethods.IMAGE_DOS_SIGNATURE)
                {
                    if (dosHeader->e_lfanew <= 0
                        || fileSize < dosHeader->e_lfanew + Marshal.SizeOf<NativeMethods.IMAGE_NT_HEADERS>())
                    {
                        return false;
                    }

                    rawFileHeader = (NativeMethods.IMAGE_NT_HEADERS*)((byte*)mapAddr + dosHeader->e_lfanew);
                }
                else if (dosHeader->e_magic == NativeMethods.IMAGE_NT_SIGNATURE)
                {
                    if (fileSize < Marshal.SizeOf<NativeMethods.IMAGE_NT_HEADERS>())
                        return false;

                    rawFileHeader = (NativeMethods.IMAGE_NT_HEADERS*)mapAddr;
                }
                else
                {
                    return false;
                }

                if (rawFileHeader->Signature != NativeMethods.IMAGE_NT_SIGNATURE)
                    return false;

                loadedImage.MappedAddress = mapAddr;
                loadedImage.FileHeader = (IntPtr)rawFileHeader;
                return true;
            }
        }