Пример #1
0
        public static bool EnablePrivilege(IntPtr hProcess, string seName, bool enable)
        {
            IntPtr hToken = IntPtr.Zero;

            if (!RAdvapi32.OpenProcessToken(hProcess, EProcessToken.Query | EProcessToken.AdjustPrivileges, ref hToken))
            {
                int error = RKernel32.GetLastError();
                return(false);
            }
            // Check
            STokenPrivileges tokenPrivileges;

            tokenPrivileges.PrivilegeCount = 1;
            if (!RAdvapi32.LookupPrivilegeValueW(null, seName, out tokenPrivileges.Privileges))
            {
                return(true);
            }
            // Adjust
            tokenPrivileges.Privileges.Attributes = enable ? ESePrivilege.Enabled : ESePrivilege.None;
            if (!RAdvapi32.AdjustTokenPrivileges(hToken, false, ref tokenPrivileges, Marshal.SizeOf(tokenPrivileges), IntPtr.Zero, IntPtr.Zero))
            {
                int error = RKernel32.GetLastError();
                return(false);
            }
            RKernel32.CloseHandle(hToken);
            // Result
            int lastError = RKernel32.GetLastError();

            return(lastError == RApi.ErrorSuccess);
        }