public static float[] ReadMatrix <T>(IntPtr address, int matrixSize) where T : struct
        {
            var ByteSize = Marshal.SizeOf(typeof(T));

            var buffer = new byte[ByteSize * matrixSize];

            Windows.Kernel32.ReadProcessMemory(_processHandle, address, buffer, buffer.Length, out var readBytes);

            return(MemoryExtensions.ConvertToFloatArray(buffer));
        }
        public static T ReadMemory <T>(IntPtr address) where T : struct
        {
            var ByteSize = Marshal.SizeOf(typeof(T));

            var buffer = new byte[ByteSize];

            Windows.Kernel32.ReadProcessMemory(_processHandle, address, buffer, buffer.Length, out var readBytes);

            return(MemoryExtensions.ByteArrayToStructure <T>(buffer));
        }
        public static bool WriteMemory <T>(IntPtr address, object value) where T : struct
        {
            var buffer = MemoryExtensions.StructureToByteArray(value);

            return(Windows.Kernel32.WriteProcessMemory(_processHandle, address, buffer, buffer.Length, out var writtenBytes) && writtenBytes != 0);
        }