public SafeThreadHandle(int tid, ThreadAccessMask access, bool ownsHandle = true) : base(ownsHandle) { handle = NativeMethods.OpenThread(access, false, tid); if (handle == IntPtr.Zero) { throw new Win32Exception(); } }
public static NativeThread TryOpen(ThreadAccessMask accessMask, int tid, bool inheritHandle = false) { var handle = Kernel32.OpenThread(accessMask, inheritHandle, tid); if (handle == null || handle.IsInvalid) { return(null); } return(new NativeThread(handle)); }
public static NativeThread Open(ThreadAccessMask accessMask, int tid, bool inheritHandle = false) { var thread = TryOpen(accessMask, tid, inheritHandle); if (thread == null) { throw new Win32Exception(Marshal.GetLastWin32Error()); } return(thread); }
public unsafe SafeWaitHandle OpenThreadHandle(ThreadAccessMask accessMask, int tid) { var data = new OpenThreadData { ThreadId = tid, AccessMask = accessMask }; if (!DeviceIoControl(_hDevice, KExploreOpenThreadHandle, &data, Marshal.SizeOf <OpenThreadData>(), out IntPtr handle, IntPtr.Size, out var returned)) { return(null); } return(new SafeWaitHandle(handle, true)); }
public static extern SafeWaitHandle OpenThread(ThreadAccessMask accessMask, bool inheritHandle, int threadId);
public static extern IntPtr OpenThread(ThreadAccessMask accessMask, bool inheritHandle, int tid);
internal static extern SafeThreadHandle OpenThread(ThreadAccessMask desiredAccess, bool inheritHandle, int threadId);
private SafeWaitHandle OpenThreadHandle(ThreadAccessMask accessMask) => Kernel32.OpenThread(accessMask, false, Id);