示例#1
0
 private static extern int AdjustTokenPrivileges(IntPtr TokenHandle, int DisableAllPrivileges, ref TOKEN_PRIVILEGES NewState, int BufferLength, ref TOKEN_PRIVILEGES PreviousState, ref int ReturnLength);
示例#2
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>
 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()));
 }