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); }