public void Dispose()
 {
     // disables any privileges that were enabled by this class
     if (previousState != null)
     {
         PrivilegeUtil.SetTokenPrivileges(process, previousState);
     }
     GC.SuppressFinalize(this);
 }
 /// <summary>
 /// Temporarily enables the privileges specified and reverts once the class is disposed.
 /// </summary>
 /// <param name="strict">Whether to fail if any privilege failed to be enabled, if false then this will continue silently</param>
 /// <param name="privileges">A list of privileges to enable</param>
 public PrivilegeEnabler(bool strict, params string[] privileges)
 {
     if (privileges.Length > 0)
     {
         process = PrivilegeUtil.GetCurrentProcess();
         Dictionary <string, bool?> newState = new Dictionary <string, bool?>();
         for (int i = 0; i < privileges.Length; i++)
         {
             newState.Add(privileges[i], true);
         }
         try
         {
             previousState = PrivilegeUtil.SetTokenPrivileges(process, newState, strict);
         }
         catch (Win32Exception e)
         {
             throw new Win32Exception(e.NativeErrorCode, String.Format("Failed to enable privilege(s) {0}", String.Join(", ", privileges)));
         }
     }
 }