Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/01/2011, 07:25
Avatar de Aquaventus
Aquaventus
 
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Solicita credenciales al copiar en red archivos

Hola montesion! gracias por tu respuesta pues si antes que me respondieras estaba usando impersonation pero mencionar que tengo unos problemas al momento de usar lo necesario de esa clase.Los archivos que subo son hacia un servidor y este pide usuario y password para tener acceso al copiado, logicamente le quiero pasar estas credenciales por codigo.Mi aplicacion es desktop y no asp.net. Adjunto mi codigo del impersonation que estoy usando:

Esto va dentro del evento click del un boton llamado subir :
Código c#:
Ver original
  1. IntPtr tokenHandle = new IntPtr(0);
  2. IntPtr dupeTokenHandle = new IntPtr(0);
  3.  
  4. const int LOGON32_PROVIDER_DEFAULT = 0;
  5. //This parameter causes LogonUser to create a primary token.
  6. const int LOGON32_LOGON_INTERACTIVE = 2;
  7. const int SecurityImpersonation = 2;
  8.  
  9. tokenHandle = IntPtr.Zero;
  10. dupeTokenHandle = IntPtr.Zero;
  11.  
  12. //MANDO EL USUARIO; EL SERVIDOR Y LA CLAVE
  13. bool returnValue = LogonUser("Administrador", @"\\200.31.122.59\", "xxx", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
  14. ref tokenHandle);
  15.  
  16. if (false == returnValue)
  17. {
  18. int ret = Marshal.GetLastWin32Error();
  19. Console.WriteLine("LogonUser failed with error code : {0}", ret);
  20. Console.WriteLine("\nError: [{0}] {1}\n", ret);
  21. int errorCode = 0x5; //ERROR_ACCESS_DENIED
  22. throw new System.ComponentModel.Win32Exception(errorCode);
  23. }
  24.  
  25. bool retVal = DuplicateToken(tokenHandle, SecurityImpersonation, ref dupeTokenHandle);
  26. if (false == retVal)
  27. {
  28. CloseHandle(tokenHandle);
  29. Console.WriteLine("Exception thrown in trying to duplicate token.");
  30. //SIEMPRE LLEGA A ESTE RETURN Y NO HACE NADA Y CUANDO
  31. //COMENTO ESTE RETURN ME BOTA QUE EL TOKENHANDLE NO
  32. // PUEDE SER CERO
  33. return;
  34. }
  35.  
  36. WindowsIdentity newId = new WindowsIdentity(dupeTokenHandle);
  37. WindowsImpersonationContext impersonatedUser = newId.Impersonate();
  38.  
  39. MessageBox.Show(WindowsIdentity.GetCurrent().Name);
  40. //AQUI MANDO A COPIAR AL SERVIDOR
  41. System.IO.File.Copy(ruta_origen, ruta_destino, false);
  42.  
  43. MessageBox.Show("Foto cargada correctamente", "GRYPHOS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  44.  
  45.  
  46. // Stop impersonating the user.
  47. impersonatedUser.Undo();
  48.  
  49. // Free the tokens.
  50. if (tokenHandle != IntPtr.Zero)
  51. CloseHandle(tokenHandle);
  52. if (dupeTokenHandle != IntPtr.Zero)
  53. CloseHandle(dupeTokenHandle);

Que puedo estar haciendo mal?. Saludos!
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net

Última edición por Aquaventus; 27/01/2011 a las 08:02