private void Dispose(bool disposing)
 {
     if (_savedToken.Handle != IntPtr.Zero)
     {
         try {} finally {
             UnsafeNativeMethods.CloseHandle(_savedToken.Handle);
             _savedToken = new HandleRef(this, IntPtr.Zero);
         }
     }
 }
            internal static bool IsImpersonating()
            {
                IntPtr token = GetCurrentToken();

                if (token == IntPtr.Zero)
                {
                    return(false);
                }

                UnsafeNativeMethods.CloseHandle(token);
                return(true);
            }
            internal void Resume()
            {
                if (_token != IntPtr.Zero)
                {
                    bool impersonationFailed = false;

                    if (_revertSucceeded)
                    {
                        if (UnsafeNativeMethods.SetThreadToken(IntPtr.Zero, _token) == 0)
                        {
                            impersonationFailed = true;
                        }
                    }

                    UnsafeNativeMethods.CloseHandle(_token);

                    if (impersonationFailed)
                    {
                        throw new HttpException(HttpRuntime.FormatResourceString(SR.Cannot_impersonate));
                    }
                }
            }