mirror of
https://github.com/LANCommander/LANCommander.Interposer.git
synced 2026-08-01 03:08:17 -04:00
- Publishes NuGet package with .NET bindings - Allows direct injection - Allows for event subscription - Adds callbacks to main Interposer DLL
139 lines
5.6 KiB
C#
139 lines
5.6 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
|
|
namespace LANCommander.Interposer
|
|
{
|
|
internal static class NativeMethods
|
|
{
|
|
// Process access rights
|
|
internal const uint PROCESS_CREATE_THREAD = 0x0002;
|
|
internal const uint PROCESS_VM_OPERATION = 0x0008;
|
|
internal const uint PROCESS_VM_READ = 0x0010;
|
|
internal const uint PROCESS_VM_WRITE = 0x0020;
|
|
internal const uint PROCESS_QUERY_INFORMATION = 0x0400;
|
|
|
|
// Memory allocation
|
|
internal const uint MEM_COMMIT = 0x00001000;
|
|
internal const uint MEM_RESERVE = 0x00002000;
|
|
internal const uint MEM_RELEASE = 0x00008000;
|
|
internal const uint PAGE_READWRITE = 0x04;
|
|
|
|
// Process creation
|
|
internal const uint CREATE_SUSPENDED = 0x00000004;
|
|
internal const uint CREATE_UNICODE_ENVIRONMENT = 0x00000400;
|
|
|
|
// File mapping
|
|
internal const uint FILE_MAP_WRITE = 0x0002;
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
internal static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
internal static extern bool CloseHandle(IntPtr hObject);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
internal static extern IntPtr VirtualAllocEx(
|
|
IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize,
|
|
uint flAllocationType, uint flProtect);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
internal static extern bool VirtualFreeEx(
|
|
IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize, uint dwFreeType);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
internal static extern bool WriteProcessMemory(
|
|
IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer,
|
|
UIntPtr nSize, out UIntPtr lpNumberOfBytesWritten);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
internal static extern IntPtr CreateRemoteThread(
|
|
IntPtr hProcess, IntPtr lpThreadAttributes, UIntPtr dwStackSize,
|
|
IntPtr lpStartAddress, IntPtr lpParameter,
|
|
uint dwCreationFlags, IntPtr lpThreadId);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
internal static extern uint WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
internal static extern bool GetExitCodeThread(IntPtr hThread, out uint lpExitCode);
|
|
|
|
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
internal static extern IntPtr GetModuleHandleW(string lpModuleName);
|
|
|
|
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
|
|
internal static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
|
|
|
|
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
internal static extern bool CreateProcessW(
|
|
string lpApplicationName,
|
|
StringBuilder lpCommandLine,
|
|
IntPtr lpProcessAttributes,
|
|
IntPtr lpThreadAttributes,
|
|
bool bInheritHandles,
|
|
uint dwCreationFlags,
|
|
IntPtr lpEnvironment,
|
|
string lpCurrentDirectory,
|
|
ref STARTUPINFO lpStartupInfo,
|
|
out PROCESS_INFORMATION lpProcessInformation);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
internal static extern uint ResumeThread(IntPtr hThread);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
internal static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode);
|
|
|
|
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
internal static extern IntPtr CreateFileMappingW(
|
|
IntPtr hFile, IntPtr lpFileMappingAttributes,
|
|
uint flProtect, uint dwMaximumSizeHigh, uint dwMaximumSizeLow,
|
|
string lpName);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
internal static extern IntPtr MapViewOfFile(
|
|
IntPtr hFileMappingObject, uint dwDesiredAccess,
|
|
uint dwFileOffsetHigh, uint dwFileOffsetLow, UIntPtr dwNumberOfBytesToMap);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
internal static extern bool UnmapViewOfFile(IntPtr lpBaseAddress);
|
|
|
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
|
internal struct STARTUPINFO
|
|
{
|
|
public int cb;
|
|
public string lpReserved;
|
|
public string lpDesktop;
|
|
public string lpTitle;
|
|
public int dwX;
|
|
public int dwY;
|
|
public int dwXSize;
|
|
public int dwYSize;
|
|
public int dwXCountChars;
|
|
public int dwYCountChars;
|
|
public int dwFillAttribute;
|
|
public int dwFlags;
|
|
public short wShowWindow;
|
|
public short cbReserved2;
|
|
public IntPtr lpReserved2;
|
|
public IntPtr hStdInput;
|
|
public IntPtr hStdOutput;
|
|
public IntPtr hStdError;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal struct PROCESS_INFORMATION
|
|
{
|
|
public IntPtr hProcess;
|
|
public IntPtr hThread;
|
|
public uint dwProcessId;
|
|
public uint dwThreadId;
|
|
}
|
|
}
|
|
}
|