forked from frederik-hoeft/InteropManager
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Extensions.cs
59 lines (54 loc) · 1.97 KB
/
Extensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading.Tasks;
namespace InteropMgr
{
public static partial class Extensions
{
public unsafe static byte[] GetBytes(this float value)
{
byte[] bytes = new byte[4];
fixed (byte* b = bytes)
{
*((int*)b) = *(int*)&value;
}
return bytes;
}
public static bool IsNULL(this byte b) => b == (byte)0;
public static int GetParentPid(this Process process)
{
string query = string.Format("SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = {0}", process.Id);
ManagementObjectSearcher search = new ManagementObjectSearcher("root\\CIMV2", query);
ManagementObjectCollection.ManagementObjectEnumerator results = search.Get().GetEnumerator();
results.MoveNext();
ManagementBaseObject queryObj = results.Current;
uint parentId = (uint)queryObj["ParentProcessId"];
return (int)parentId;
}
public static Process GetParentProcess(this Process process)
{
return Process.GetProcessById(process.GetParentPid());
}
public static bool IsWin64Emulator(this Process process)
{
if ((Environment.OSVersion.Version.Major > 5)
|| ((Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor >= 1)))
{
try
{
return WinAPI.IsWow64Process(process.Handle, out bool retVal) && retVal;
}
catch (Win32Exception)
{
throw new UnauthorizedAccessException("ACCESS DENIED: could not determine if process is running WoW64.");
}
}
return false;
}
}
}