/*
         *  -------------------------
         *  Read/Write Implementation
         *  -------------------------
         */

        /// <inheritdoc />
        public void Read <T>(IntPtr memoryAddress, out T value, bool marshal = false)
        {
            int structSize = Struct.GetSize <T>(marshal);

            byte[] buffer = new byte[structSize];

            fixed(byte *bufferPtr = buffer)
            {
                bool succeeded = Kernel32.ReadProcessMemory(_processHandle, memoryAddress, (IntPtr)bufferPtr, (uint)structSize, out _);

                Struct.FromPtr((IntPtr)bufferPtr, out value, _localMemory.Read, marshal);

                if (!succeeded)
                {
                    throw new MemoryException($"ReadProcessMemory failed to read {structSize} bytes of memory from {memoryAddress.ToString("X")}");
                }
            }
        }