public static AccessTokenHandle FromThreadHandle(TMThreadHandle hThread, params TokenAccess[] desiredAccess) { var defaultAccess = TokenAccess.TOKEN_ALL_ACCESS; uint combinedAccess = (uint)defaultAccess; if (desiredAccess.Length > 0) { combinedAccess = (uint)(new List <TokenAccess>(desiredAccess).Aggregate((x, y) => x | y)); } IntPtr hToken; if (!Advapi32.OpenThreadToken(hThread.Handle, combinedAccess, false, out hToken)) { Logger.GetInstance().Error($"Failed to retrieve handle to processes access token. OpenThreadToken failed with error: {Kernel32.GetLastError()}"); throw new OpenThreadTokenException(); } if (desiredAccess.Length > 0) { return(new AccessTokenHandle(hToken, desiredAccess)); } else { return(new AccessTokenHandle(hToken, defaultAccess)); } }
public static AccessTokenHandle GetCurrentThreadTokenHandle(params TokenAccess[] desiredAccess) { var hThread = TMThreadHandle.GetCurrentThreadHandle(); return(AccessTokenHandle.FromThreadHandle(hThread)); }