1
0
mirror of https://github.com/mastercodeon314/KsDumper-11.git synced 2024-11-24 15:00:11 +01:00
KsDumper-11/DriverInterface/Utility/MarshalUtility.cs
mastercodeon314 785233a68f v1.3 update.
Updated to KDU v1.3.4
Added new Provider Selector
Updated DarkControls
Many bug fixes
2023-10-06 18:53:56 -06:00

53 lines
1.5 KiB
C#

using System;
using System.Runtime.InteropServices;
namespace KsDumper11.Utility
{
// Token: 0x0200000A RID: 10
public static class MarshalUtility
{
// Token: 0x0600005D RID: 93 RVA: 0x000045F4 File Offset: 0x000027F4
public static IntPtr CopyStructToMemory<T>(T obj) where T : struct
{
IntPtr unmanagedAddress = MarshalUtility.AllocEmptyStruct<T>();
Marshal.StructureToPtr<T>(obj, unmanagedAddress, true);
return unmanagedAddress;
}
// Token: 0x0600005E RID: 94 RVA: 0x00004618 File Offset: 0x00002818
public static IntPtr AllocEmptyStruct<T>() where T : struct
{
int structSize = Marshal.SizeOf<T>();
return MarshalUtility.AllocZeroFilled(Marshal.SizeOf<T>());
}
// Token: 0x0600005F RID: 95 RVA: 0x0000463C File Offset: 0x0000283C
public static IntPtr AllocZeroFilled(int size)
{
IntPtr allocatedPointer = Marshal.AllocHGlobal(size);
MarshalUtility.ZeroMemory(allocatedPointer, size);
return allocatedPointer;
}
// Token: 0x06000060 RID: 96 RVA: 0x00004660 File Offset: 0x00002860
public static void ZeroMemory(IntPtr pointer, int size)
{
for (int i = 0; i < size; i++)
{
Marshal.WriteByte(pointer + i, 0);
}
}
// Token: 0x06000061 RID: 97 RVA: 0x00004690 File Offset: 0x00002890
public static T GetStructFromMemory<T>(IntPtr unmanagedAddress, bool freeMemory = true) where T : struct
{
T structObj = Marshal.PtrToStructure<T>(unmanagedAddress);
if (freeMemory)
{
Marshal.FreeHGlobal(unmanagedAddress);
}
return structObj;
}
}
}