mirror of
https://github.com/ayufan/steam-deck-tools.git
synced 2025-12-06 07:12:01 +01:00
56 lines
2.1 KiB
C#
56 lines
2.1 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Runtime.InteropServices;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
|
|||
|
|
namespace FanControl
|
|||
|
|
{
|
|||
|
|
internal class InpOut
|
|||
|
|
{
|
|||
|
|
[DllImport("inpoutx64.dll", EntryPoint = "MapPhysToLin", CallingConvention = CallingConvention.StdCall)]
|
|||
|
|
public static extern IntPtr MapPhysToLin(IntPtr pbPhysAddr, uint dwPhysSize, out IntPtr pPhysicalMemoryHandle);
|
|||
|
|
|
|||
|
|
[DllImport("inpoutx64.dll", EntryPoint = "UnmapPhysicalMemory", CallingConvention = CallingConvention.StdCall)]
|
|||
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|||
|
|
public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, IntPtr pbLinAddr);
|
|||
|
|
|
|||
|
|
[DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUchar", CallingConvention = CallingConvention.StdCall)]
|
|||
|
|
[return: MarshalAs(UnmanagedType.U1)]
|
|||
|
|
public static extern byte DlPortReadPortUchar(ushort port);
|
|||
|
|
|
|||
|
|
[DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUchar", CallingConvention = CallingConvention.StdCall)]
|
|||
|
|
public static extern byte DlPortWritePortUchar(ushort port, byte vlaue);
|
|||
|
|
|
|||
|
|
public static byte[] ReadMemory(IntPtr baseAddress, uint size)
|
|||
|
|
{
|
|||
|
|
IntPtr pdwLinAddr = MapPhysToLin(baseAddress, size, out IntPtr pPhysicalMemoryHandle);
|
|||
|
|
if (pdwLinAddr != IntPtr.Zero)
|
|||
|
|
{
|
|||
|
|
byte[] bytes = new byte[size];
|
|||
|
|
Marshal.Copy(pdwLinAddr, bytes, 0, bytes.Length);
|
|||
|
|
UnmapPhysicalMemory(pPhysicalMemoryHandle, pdwLinAddr);
|
|||
|
|
|
|||
|
|
return bytes;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static bool WriteMemory(IntPtr baseAddress, byte[] data)
|
|||
|
|
{
|
|||
|
|
IntPtr pdwLinAddr = MapPhysToLin(baseAddress, (uint)data.Length, out IntPtr pPhysicalMemoryHandle);
|
|||
|
|
if (pdwLinAddr != IntPtr.Zero)
|
|||
|
|
{
|
|||
|
|
Marshal.Copy(data, 0, pdwLinAddr, data.Length);
|
|||
|
|
UnmapPhysicalMemory(pPhysicalMemoryHandle, pdwLinAddr);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|