title: IDisposable - how to properly implement this
body: <p>I have a class as follows:</p>
  <pre><code>public class WowRedirectionDisabler : IDisposable
  {
      private IntPtr _oldValue;
      private bool _isDisposed;
          
      public WowRedirectionDisabler ()
      {
          if (!Environment.Is64BitOperatingSystem)
              throw new NotSupportedException(&quot;OperatingSystem must be 64 bits&quot;);
  
          if (!NativeMethods.Wow64DisableWow64FsRedirection(out _oldValue))
              throw new ExternalException(&quot;Unable to disable Wow64 Redirection&quot;);
      }
  
      public void Dispose()
      {
          Dispose(true);
          GC.SuppressFinalize(this);
      }
  
      protected virtual void Dispose(bool disposing)
      {
          if (_isDisposed) return;
  
          if (!NativeMethods.Wow64RevertWow64FsRedirection(_oldValue))
              throw new ExternalException(&quot;Unable to revert Wow64 Redirection&quot;);
      }
  
      ~WowRedirectionDisabler ()
      {
          Dispose(false);
      }
  }
  </code></pre>
  <p>Can I guarantee that <code>_oldValue</code> will <em>always</em> exist in case the finaliser needs to run? If not, how to implement this properly?</p>