Copie de fichiers sur le réseau (nécessitant une authentification)

Est-il possible de s'authentifier en tant qu'local (pas de réseau) de l'utilisateur afin de copier des fichiers sur le réseau .Net?

net use n'est pas une option, et je n'arrive pas à obtenir LogonUser de travail.

Des idées?


[Modifier] Voici un code:

public class UserImpersonator : IDisposable
{
    private WindowsImpersonationContext _impersonationContext;
    private IntPtr _userHandle = IntPtr.Zero;

    [DllImport("advapi32.dll", SetLastError = true)]
    private static extern bool LogonUser(
        string lpszUsername,
        string lpszDomain,
        string lpszPassword,
        int dwLogonType,
        int dwLogonProvider,
        out IntPtr phToken
        );

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool CloseHandle(IntPtr hHandle);

    public UserImpersonator(string username, string password)
    {
        LogonUser(username, "", password, (int)LogonType.LOGON32_LOGON_NETWORK,
                  (int)LogonProvider.LOGON32_PROVIDER_DEFAULT, out _userHandle);
        _impersonationContext = WindowsIdentity.Impersonate(_userHandle);
    }

    public void Dispose()
    {
        CloseHandle(_userHandle);
        _impersonationContext.Undo();
    }

    private enum LogonType : int
    {
        LOGON32_LOGON_INTERACTIVE = 2,
        LOGON32_LOGON_NETWORK = 3,
        LOGON32_LOGON_BATCH = 4,
        LOGON32_LOGON_SERVICE = 5,
        LOGON32_LOGON_UNLOCK = 7,
        LOGON32_LOGON_NETWORK_CLEARTEXT = 8,
        LOGON32_LOGON_NEW_CREDENTIALS = 9,
    }

    private enum LogonProvider
    {
        LOGON32_PROVIDER_DEFAULT = 0,
    }
}

Quand j'enveloppe le File.Copy opération dans using(new UserImpersonator(username, password)), j'obtiens:

Système.IO.IOException: échec d'ouverture de session: nom d'utilisateur inconnu ou mot de passe incorrect.

Si, toutefois, j'ai d'abord essayer de se connecter à l'action dans l'explorateur (à l'entrée de l'authentification de l'info quand il le demande), l' File.Copy œuvres. Il semble que le code ci-dessus ne rien faire du tout.

OriginalL'auteur BlueRaja - Danny Pflughoeft | 2010-04-26