c# - tools - Cómo acceder a Network Share desde Raspberry Pi con IoT Core en la aplicación UWP
windows iot core image helper (1)
Tengo la aplicación ac # UWP que pretendo ejecutar en una Raspberry PI con Windows 10 IoT Core. El problema que tengo es cuando intento conectarme a un recurso compartido UNC para copiar algunos archivos.
La red es solo una red doméstica con credenciales de usuario local, compartir en otra computadora en la misma red.
Cuando await StorageFolder.GetFolderFromPathAsync(@"//share/folder");
la aplicación localmente, solo puedo usar await StorageFolder.GetFolderFromPathAsync(@"//share/folder");
para conectarme al recurso compartido y esto funciona bien, supongo que esto se debe a que las credenciales que estoy usando se guardan en la máquina local. Cuando se ejecuta en el RPi, el error recibido es: "El sistema no puede encontrar el archivo especificado".
¿Alguien tiene alguna idea sobre cómo me conectaría a este disco? Estoy en juego en cualquier momento para que funcione ...
Lo que he intentado:
- Compartir tiene permisos para todos y se puede acceder sin credenciales
- El servidor de seguridad del equipo de red compartida está desactivado.
- manifest tiene las redes privadas, la autenticación de la empresa y la configuración de Internet (ambas) (suponiendo que funciona correctamente a nivel local).
-
await StorageFolder.GetFolderFromPathAsync(@"//share/folder");
("El sistema no puede encontrar el archivo especificado.") - usando powershell con
net use "//share/folder" "password" /USER:"user"
funciona y se puede navegar por unc - Se intentó usar
WNetAddConnection2
como en la clase Prevent WNetAddConnection2 que permite a los usuarios prohibidos acceder a la carpeta compartida -
WNetUseConnection
usarWNetUseConnection
con ambos indicadores de usuario y sin (ninguno funciona) - FolderPicker o FileOpenPicker, pero estos parecen estar deshabilitados para IoT Core ( https://ms-iot.github.io/content/en-US/win10/UnavailableApis.htm ).
Gracias por adelantado,
Pablo.
¿Ya has probado la suplantación? Esto es lo que uso en uno de mis proyectos:
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
private void Impersonate(Enum domainName, string userName, string password)
{
IntPtr _tokenHandle = IntPtr.Zero;
int Logon32_Provider_Default = 0;
int Logon32_Logon_Interactive = 2;
bool userSuccess = LogonUser(userName, domainName.ToString(), password, Logon32_Logon_Interactive, Logon32_Provider_Default, ref _tokenHandle);
if (!userSuccess)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
WindowsImpersonationContext _impersonatedUser = new WindowsIdentity(_tokenHandle).Impersonate();
}