title: Logon failure: the user has not been granted the requested logon type at this computer
body: <p>I have a website in which I create a file and save it in a remote share folder. I have a account which have write access to that share folder. So I impersonate that account while saving the file in that path. This logic works when I run the application from my visual studio locally in my machine. When I deploy the code in the development server, It does't work. I get the following error.</p>
  
  <p>"Logon failure: the user has not been granted the requested logon type at this computer"</p>
  
  <p>can someone help.</p>
  
  <p>Here is the impersonation code from codeproject</p>
  
  <pre><code>using System;
  using System.Security.Principal;
  using System.Runtime.InteropServices;
  using System.ComponentModel;
  
  public class Impersonator :
      IDisposable
  
  {
  
  public Impersonator(
      string userName,
      string domainName,
      string password)
  {
      ImpersonateValidUser(userName, domainName, password);
  }
  
  // ------------------------------------------------------------------
  #endregion
  
  #region IDisposable member.
  // ------------------------------------------------------------------
  
  public void Dispose()
  {
      UndoImpersonation();
  }
  
  // ------------------------------------------------------------------
  #endregion
  
  #region P/Invoke.
  // ------------------------------------------------------------------
  
  [DllImport("advapi32.dll", SetLastError = true)]
  private static extern int LogonUser(
      string lpszUserName,
      string lpszDomain,
      string lpszPassword,
      int dwLogonType,
      int dwLogonProvider,
      ref IntPtr phToken);
  
  [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  private static extern int DuplicateToken(
      IntPtr hToken,
      int impersonationLevel,
      ref IntPtr hNewToken);
  
  [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  private static extern bool RevertToSelf();
  
  [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
  private static extern bool CloseHandle(
      IntPtr handle);
  
  private const int LOGON32_LOGON_INTERACTIVE = 2;
  private const int LOGON32_PROVIDER_DEFAULT = 0;
  
  // ------------------------------------------------------------------
  #endregion
  
  #region Private member.
  // ------------------------------------------------------------------
  
  /// &lt;summary&gt;
  /// Does the actual impersonation.
  /// &lt;/summary&gt;
  /// &lt;param name="userName"&gt;The name of the user to act as.&lt;/param&gt;
  /// &lt;param name="domainName"&gt;The domain name of the user to act as.&lt;/param&gt;
  /// &lt;param name="password"&gt;The password of the user to act as.&lt;/param&gt;
  private void ImpersonateValidUser(
      string userName,
      string domain,
      string password)
  {
      WindowsIdentity tempWindowsIdentity = null;
      IntPtr token = IntPtr.Zero;
      IntPtr tokenDuplicate = IntPtr.Zero;
  
      try
      {
          if (RevertToSelf())
          {
              if (LogonUser(
                  userName,
                  domain,
                  password,
                  LOGON32_LOGON_INTERACTIVE,
                  LOGON32_PROVIDER_DEFAULT,
                  ref token) != 0)
              {
                  if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
                  {
                      tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
                      impersonationContext = tempWindowsIdentity.Impersonate();
                  }
                  else
                  {
                      throw new Win32Exception(Marshal.GetLastWin32Error());
                  }
              }
              else
              {
                  throw new Win32Exception(Marshal.GetLastWin32Error());
              }
          }
          else
          {
              throw new Win32Exception(Marshal.GetLastWin32Error());
          }
      }
      finally
      {
          if (token != IntPtr.Zero)
          {
              CloseHandle(token);
          }
          if (tokenDuplicate != IntPtr.Zero)
          {
              CloseHandle(tokenDuplicate);
          }
      }
  }
  
  /// &lt;summary&gt;
  /// Reverts the impersonation.
  /// &lt;/summary&gt;
  private void UndoImpersonation()
  {
      if (impersonationContext != null)
      {
          impersonationContext.Undo();
      }
  }
  
  private WindowsImpersonationContext impersonationContext = null;
  
  // ------------------------------------------------------------------
  #endregion
  </code></pre>
  
  <p>}</p>