コード例 #1
0
 public SafeThreadHandle(int tid, ThreadAccessMask access, bool ownsHandle = true) : base(ownsHandle)
 {
     handle = NativeMethods.OpenThread(access, false, tid);
     if (handle == IntPtr.Zero)
     {
         throw new Win32Exception();
     }
 }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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));
        }
コード例 #5
0
 public static extern SafeWaitHandle OpenThread(ThreadAccessMask accessMask, bool inheritHandle, int threadId);
コード例 #6
0
 public static extern IntPtr OpenThread(ThreadAccessMask accessMask, bool inheritHandle, int tid);
コード例 #7
0
 internal static extern SafeThreadHandle OpenThread(ThreadAccessMask desiredAccess, bool inheritHandle, int threadId);
コード例 #8
0
 private SafeWaitHandle OpenThreadHandle(ThreadAccessMask accessMask) => Kernel32.OpenThread(accessMask, false, Id);