public static AccessTokenHandle FromProcessHandle(TMProcessHandle process, 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 tokenHandle; Logger.GetInstance().Debug($"Attemping to open handle to process access token."); if (!Advapi32.OpenProcessToken(process.Handle, combinedAccess, out tokenHandle)) { Logger.GetInstance().Error($"Failed to retrieve handle to processes access token. OpenProcessToken failed with error: {Kernel32.GetLastError()}"); throw new OpenProcessTokenException(); } Logger.GetInstance().Debug($"Successfully opened handle to process access token."); if (desiredAccess.Length > 0) { return(new AccessTokenHandle(tokenHandle, desiredAccess)); } else { return(new AccessTokenHandle(tokenHandle, defaultAccess)); } }
public static AccessTokenHandle GetCurrentProcessTokenHandle(params TokenAccess[] desiredAccess) { var hProc = TMProcessHandle.GetCurrentProcessHandle(); return(AccessTokenHandle.FromProcessHandle(hProc)); }