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 originalIntPtr tokenHandle = new IntPtr(0);
IntPtr dupeTokenHandle = new IntPtr(0);
const int LOGON32_PROVIDER_DEFAULT = 0;
//This parameter causes LogonUser to create a primary token.
const int LOGON32_LOGON_INTERACTIVE = 2;
const int SecurityImpersonation = 2;
tokenHandle = IntPtr.Zero;
dupeTokenHandle = IntPtr.Zero;
//MANDO EL USUARIO; EL SERVIDOR Y LA CLAVE
bool returnValue = LogonUser("Administrador", @"\\200.31.122.59\", "xxx", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
ref tokenHandle);
if (false == returnValue)
{
int ret = Marshal.GetLastWin32Error();
Console.WriteLine("LogonUser failed with error code : {0}", ret);
Console.WriteLine("\nError: [{0}] {1}\n", ret);
int errorCode = 0x5; //ERROR_ACCESS_DENIED
throw new System.ComponentModel.Win32Exception(errorCode);
}
bool retVal = DuplicateToken(tokenHandle, SecurityImpersonation, ref dupeTokenHandle);
if (false == retVal)
{
CloseHandle(tokenHandle);
Console.WriteLine("Exception thrown in trying to duplicate token.");
//SIEMPRE LLEGA A ESTE RETURN Y NO HACE NADA Y CUANDO
//COMENTO ESTE RETURN ME BOTA QUE EL TOKENHANDLE NO
// PUEDE SER CERO
return;
}
WindowsIdentity newId = new WindowsIdentity(dupeTokenHandle);
WindowsImpersonationContext impersonatedUser = newId.Impersonate();
MessageBox.Show(WindowsIdentity.GetCurrent().Name);
//AQUI MANDO A COPIAR AL SERVIDOR
System.IO.File.Copy(ruta_origen, ruta_destino, false);
MessageBox.Show("Foto cargada correctamente", "GRYPHOS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
// Stop impersonating the user.
impersonatedUser.Undo();
// Free the tokens.
if (tokenHandle != IntPtr.Zero)
CloseHandle(tokenHandle);
if (dupeTokenHandle != IntPtr.Zero)
CloseHandle(dupeTokenHandle);
Que puedo estar haciendo mal?. Saludos!