Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
        public static AccessTokenHandle GetCurrentThreadTokenHandle(params TokenAccess[] desiredAccess)
        {
            var hThread = TMThreadHandle.GetCurrentThreadHandle();

            return(AccessTokenHandle.FromThreadHandle(hThread));
        }