35 lines
828 B
C#
35 lines
828 B
C#
using System.Runtime.CompilerServices;
|
|
|
|
namespace Xorog.UniversalExtensions.WindowsAPI;
|
|
|
|
public class WindowsUtils
|
|
{
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static FileInfo? GetMainModuleFilepath(int pid)
|
|
{
|
|
var processHandle = kernel32.OpenProcess(0x0400 | 0x0010, false, pid);
|
|
|
|
if (processHandle == IntPtr.Zero)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
const int lengthSb = 4000;
|
|
|
|
var sb = new StringBuilder(lengthSb);
|
|
|
|
string? result = null;
|
|
|
|
if (psapi.GetModuleFileNameEx(processHandle, IntPtr.Zero, sb, lengthSb) > 0)
|
|
{
|
|
result = Path.GetFullPath(sb.ToString());
|
|
}
|
|
|
|
kernel32.CloseHandle(processHandle);
|
|
|
|
if (result == null)
|
|
return null;
|
|
|
|
return new FileInfo(result);
|
|
}
|
|
}
|