private void AdjustPrivilege(bool enable)
        {
            using (WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent(TokenAccessLevels.Query | TokenAccessLevels.AdjustPrivileges))
            {
                if (currentIdentity != null)
                {
                    IntPtr          hToken        = currentIdentity.Token;
                    TokenPrivileges newPrivilege  = new TokenPrivileges();
                    TokenPrivileges mOldPrivilege = new TokenPrivileges();
                    newPrivilege.PrivilegeCount = 1;
                    newPrivilege.Luid           = Filesystem.NativeMethods.LongToLuid(_mPrivilege.LookupLuid());
                    newPrivilege.Attributes     = (uint)(enable ? 2 : 0); // 2 = SePrivilegeEnabled;

                    uint length;
                    if (!NativeMethods.AdjustTokenPrivileges(hToken, false, ref newPrivilege, (uint)Marshal.SizeOf(mOldPrivilege), out mOldPrivilege, out length))
                    {
                        NativeError.ThrowException(Marshal.GetLastWin32Error());
                    }

                    // If no privilege was changed, we don't want to reset it.
                    if (mOldPrivilege.PrivilegeCount == 0)
                    {
                        _mPrivilege = null;
                    }
                }
            }
        }
        private void AdjustPrivilege(bool enable)
        {
            using (var currentIdentity = WindowsIdentity.GetCurrent(TokenAccessLevels.Query | TokenAccessLevels.AdjustPrivileges))
            {
                uint length;
                var  hToken        = currentIdentity.Token;
                var  mOldPrivilege = new TOKEN_PRIVILEGES();

                var newPrivilege = new TOKEN_PRIVILEGES
                {
                    PrivilegeCount = 1,
                    Luid           = Filesystem.NativeMethods.LongToLuid(EnabledPrivilege.LookupLuid()),

                    // 2 = SePrivilegeEnabled;
                    Attributes = (uint)(enable ? 2 : 0)
                };


                var success = NativeMethods.AdjustTokenPrivileges(hToken, false, ref newPrivilege, (uint)Marshal.SizeOf(mOldPrivilege), out mOldPrivilege, out length);

                var lastError = Marshal.GetLastWin32Error();
                if (!success)
                {
                    NativeError.ThrowException(lastError);
                }


                // If no privilege was changed, we don't want to reset it.
                if (mOldPrivilege.PrivilegeCount == 0)
                {
                    EnabledPrivilege = null;
                }
            }
        }
Example #3
0
        private void AdjustPrivilege(bool enable)
        {
            using (WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent(TokenAccessLevels.Query | TokenAccessLevels.AdjustPrivileges))
            {
                IntPtr hToken = currentIdentity.Token;
                NativeMethods.TOKEN_PRIVILEGES newPrivilege  = new NativeMethods.TOKEN_PRIVILEGES();
                NativeMethods.TOKEN_PRIVILEGES mOldPrivilege = new NativeMethods.TOKEN_PRIVILEGES();
                newPrivilege.PrivilegeCount = 1;
                newPrivilege.Luid           = NativeMethods.LongToLuid(mPrivilege.LookupLuid());
                newPrivilege.Attributes     = enable ? NativeMethods.SE_PRIVILEGE_ENABLED : 0;
                uint length;
                if (!NativeMethods.AdjustTokenPrivileges(hToken, false, ref newPrivilege, (uint)Marshal.SizeOf(mOldPrivilege), out mOldPrivilege, out length))
                {
                    throw new Win32Exception();
                }

                if (mOldPrivilege.PrivilegeCount == 0)
                {
                    // If no privilege was changed, we don't want to reset it.
                    mPrivilege = null;
                }
            }
        }