title: Accessing a Shared File (UNC) From a Remote, Non-Trusted Domain With Credentials
body: <p>We've run into an interesting situation that needs solving, and my searches have turned up nill. I therefore appeal to the SO community for help.</p>
  
  <p>The issue is this: we have a need to programmatically access a shared file that is not in our domain, and is not within a trusted external domain via remote file sharing / UNC. Naturally, we need to supply credentials to the remote machine.</p>
  
  <p>Typically, one solves this problem in one of two ways: </p>
  
  <ol>
  <li>Map the file share as a drive and supply the credentials at that time. This is typically done using the <code>NET USE</code> command or the Win32 functions that duplicate <code>NET USE</code>. </li>
  <li>Access the file with a UNC path as if the remote computer were on the domain and ensure that the account under which the program runs is duplicated (including password) on the remote machine as a local user. Basically leverage the fact that Windows will automatically supply the current user's credentials when the user attempts to access a shared file. </li>
  <li>Don't use remote file sharing. Use FTP (or some other means) to transfer the file, work on it locally, then transfer it back. </li>
  </ol>
  
  <p>For various and sundry reasons, our security / network architects have rejected the first two approaches. The second approach is obviously a security hole; if the remote computer is compromised, the local computer is now at risk. The first approach is unsatisfactory because the newly mounted drive is a shared resource available to other programs on the local computer during file access by the program. Even though it's quite possible to make this temporary, it's still a hole in their opinion.</p>
  
  <p>They're open to the third option, but the remote network admins insist on SFTP rather than FTPS, and FtpWebRequest only supports FTPS. SFTP <strong>is</strong> the more firewall-friendly option and there are a couple libraries I could use for that approach, but I'd prefer to reduce my dependencies if I can. </p>
  
  <p>I've searched MSDN for either a managed or a win32 means of using remote file sharing, but I have failed to come up with anything useful. </p>
  
  <p>And so I ask: Is there another way? Did I miss a super-secret win32 function that does what I want? Or must I pursue some variant of option 3?</p>