示例#1
0
 /// <summary>
 /// Tries to enable the specified privilege.
 /// </summary>
 /// <param name="privilege">The privilege to enable.</param>
 /// <exception cref="PrivilegeException">There was an error while requesting a required privilege.</exception>
 /// <remarks>Thanks to Michael S. Muegel for notifying us about a bug in this code.</remarks>
 protected static void EnableToken(string privilege)
 {
     if (!CheckEntryPoint("advapi32.dll", "AdjustTokenPrivileges"))
       {
     return;
       }
       IntPtr tokenHandle = IntPtr.Zero;
       LUID privilegeLUID = new LUID();
       TOKEN_PRIVILEGES newPrivileges = new TOKEN_PRIVILEGES();
       TOKEN_PRIVILEGES tokenPrivileges;
       if (
     OpenProcessToken(Process.GetCurrentProcess().Handle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref tokenHandle) ==
     0)
     throw new PrivilegeException(FormatError(Marshal.GetLastWin32Error()));
       if (LookupPrivilegeValue("", privilege, ref privilegeLUID) == 0)
     throw new PrivilegeException(FormatError(Marshal.GetLastWin32Error()));
       tokenPrivileges.PrivilegeCount = 1;
       tokenPrivileges.Privileges.Attributes = SE_PRIVILEGE_ENABLED;
       tokenPrivileges.Privileges.pLuid = privilegeLUID;
       int size = 4;
       if (
     AdjustTokenPrivileges(tokenHandle, 0, ref tokenPrivileges, 4 + (12 * tokenPrivileges.PrivilegeCount),
                       ref newPrivileges, ref size) == 0)
     throw new PrivilegeException(FormatError(Marshal.GetLastWin32Error()));
 }
示例#2
0
 private static extern int AdjustTokenPrivileges(IntPtr TokenHandle, int DisableAllPrivileges,
     ref TOKEN_PRIVILEGES NewState, int BufferLength,
     ref TOKEN_PRIVILEGES PreviousState, ref int ReturnLength);
示例#3
0
 private static extern int AdjustTokenPrivileges(IntPtr TokenHandle, int DisableAllPrivileges,
                                                 ref TOKEN_PRIVILEGES NewState, int BufferLength,
                                                 ref TOKEN_PRIVILEGES PreviousState, ref int ReturnLength);