2011-06-28 7 views
6

Je suis coincé avec cette question.Comment copier un fichier depuis un partage UNC vers un système local?

J'ai un partage UNC, je connais les détails du compte, qui a fullaccess, mais il n'a pas accès à mon système local. Je peux accéder à distance avec UNC:

var token = default(IntPtr); 
var context = default(WindowsImpersonationContext); 
LogonUser(_config.Username, _config.Domain, _config.Password, 2, 0, out token); 
context = WindowsIdentity.Impersonate(token); 

//TODO :: System.IO operations 
File.Copy("remote-unc-path","local-path",true); // Exception : Access is denied. 

context.Undo(); 
CloseHandle(token); 

Mais, je ne peux pas accéder à mon système local pendant usurpation d'identité, car compte n'a pas accès.

Comment copier un fichier dans cette situation? Dois-je utiliser quelque chose comme un tampon et activer/désactiver l'usurpation d'identité?

+0

BTW, ne pas oublier de jeter –

Répondre

3

Ce que vous devez faire est de lire tous les octets puis les écrire:

var token = default(IntPtr); 
    using (var context = default(WindowsImpersonationContext)) 
    { 
     LogonUser(_config.Username, _config.Domain, _config.Password, 2, 0, out token); 
     context = WindowsIdentity.Impersonate(token); 
     var bytes = File.ReadAllBytes("remote-unc-path"); 
     context.Undo(); 
     CloseHandle(token); 
     File.WriteAllBytes("local-path", bytes); 
    } 
+0

Mais, les fichiers sont énormes ... ~ 200Mo - ~ 1Go .. aussi, cela fait partie du système, qui peut avoir plusieurs "stockages unc-file". Il va copier des fichiers dans différents threads ... Je ne veux vraiment pas à ReadALL pour chaque fichier .. Il va manger toute la mémoire – Degot

+0

J'ai trouvé une solution ... Son nom est WNetUseConnection – Degot

+0

@Oskar - Cela fonctionnait comme un charme pour moi en utilisant Windows Server 2003/IIS6.x mais avec Windows Server 2008/IIS 7.5 cela ne fonctionnera (au moins autant que je peux dire) si l'utilisateur a un compte d'utilisateur "Local" sur le système I ' J'essaie de me connecter à. Donc oui, en voyant désespérément une réponse non-administrateur-compte à celui-ci aussi. Stupide sécurité Windows. : - \ – jerhewet

Questions connexes