Beispiel #1
0
        public static bool Enable()
        {
            IntPtr handle;
            bool   res = Advapi32.OpenProcessToken(Kernel32.GetCurrentProcess(), DesiredAccess.TOKEN_ADJUST_PRIVILEGES | DesiredAccess.TOKEN_QUERY, out handle);

            if (!res)
            {
                Kernel32.CloseHandle(handle);
                return(false);
            }
            ;

            // First pass: get current privilege settings
            Luid luid = new Luid();

            res = Advapi32.LookupPrivilegeValue(null, "SeDebugPrivilege", ref luid);
            TokenPrivileges tp1 = new TokenPrivileges
            {
                PrivilegeCount = 1
            };

            tp1.Privileges               = new LuidAndAttributes[1];
            tp1.Privileges[0].Luid       = luid;
            tp1.Privileges[0].Attributes = 0;

            TokenPrivileges tPrev   = new TokenPrivileges();
            uint            retSize = 0;

            res = Advapi32.AdjustTokenPrivileges(handle, false, ref tp1, tp1.GetSize(), ref tPrev, out retSize);
            if (!res)
            {
                Kernel32.CloseHandle(handle);
                return(false);
            }
            ;

            //
            // Second pass: set privilege based on previous setting
            //
            tPrev.PrivilegeCount            = 1;
            tPrev.Privileges[0].Luid        = luid;
            tPrev.Privileges[0].Attributes |= SePrivilege.PrivilegeEnabled;

            res = Advapi32.AdjustTokenPrivileges(handle, false, ref tPrev, retSize, IntPtr.Zero, IntPtr.Zero);

            return(res);
        }