Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
        public static AccessTokenHandle GetCurrentProcessTokenHandle(params TokenAccess[] desiredAccess)
        {
            var hProc = TMProcessHandle.GetCurrentProcessHandle();

            return(AccessTokenHandle.FromProcessHandle(hProc));
        }