title: Accessing a file on a network drive
body: <p><strong>Background:</strong> I have an application that has to read from files on a network drive (Z:)</p>
  
  <p>This works great in my office domain, however it does not work on site (in a different domain). As far as I can tell the domain users and network drives are set in the same way, however I do not have access to users etc in the customers domain.</p>
  
  <p>When I couldn't access the network drive I figured I needed a token for a user. This is how I impersionate the user:</p>
  
  <pre><code>[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
  public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
  </code></pre>
  
  <p>...</p>
  
  <pre><code>const string userName = "USER";
  const string pass = "PASS";
  const string domainName = "VALIDDOMAIN.local"  //tried with valid domain name and with null, same result
  const int LOGON32_PROVIDER_DEFAULT = 0;
  const int LOGON32_LOGON_INTERACTIVE = 2;
  
  IntPtr tokenHandle = new IntPtr(0);
  
  bool returnValue = LogonUser(userName, domainName, pass,
              LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
              ref tokenHandle);
  
  if (!returnValue)
      throw new Exception("Logon failed.");
  
  WindowsImpersonationContext impersonatedUser = null;
  try
  {
      WindowsIdentity wid = new WindowsIdentity(tokenHandle);
      impersonatedUser = wid.Impersonate();
  
  }
  finally
  {
      if (impersonatedUser != null) impersonatedUser.Undo();
  }
  </code></pre>
  
  <p>Now here is the interesting/weird part. In my network the application can already access the network drive, and if I try to impersonate the active user (exactly the same user, including the same domain) it will not be able to access the network drive.</p>
  
  <p>This leaves me helpless since now I have no idea what works and what doesn't, and more to the point, will it work on site?</p>
  
  <p>What am I missing?</p>
  
  <p><strong>EDIT:</strong> I forgot to write this while originally asking the question: I have tried entering a valid domain name and it didn't work, so after that I tried entering null to get the same username as I would without this code (since it works by default in our domain). This did not help, and that's how domain = null; ended up in this question.</p>