How to access Network Share from Raspberry Pi running IoT Core in UWP app
Asked Answered
A

1

18

I have a c# UWP app that I'm intending to run on a Raspberry PI with Windows 10 IoT Core. The problem I have is when I try to connect to a UNC share to copy some files.

The network is just a home network with local user credentials, share is on another computer on the same network.

When running the app locally I can just use await StorageFolder.GetFolderFromPathAsync(@"\\share\folder"); to connect to the share and this works fine, I'm assuming this is because the credentials I'm using are saved on the local machine. When ran on the RPi the error received is: "The system cannot find the file specified."

Does anyone have any ideas on how I would connect to this drive, I'm game for anything at this stage to get it to work...

What I've tried:

  1. Share has permissions for everyone and can be accessed without credentials
  2. Network share computer firewall is off.
  3. manifest has the private networks, enterprise auth, and Internet (both) setup (assuming okay as works locally).
  4. await StorageFolder.GetFolderFromPathAsync(@"\\share\folder"); ("The system cannot find the file specified.")
  5. using powershell with net use "\\share\folder" "password" /USER:"user" works and unc can be browsed
  6. Tried using WNetAddConnection2 as in Prevent WNetAddConnection2 class which allows prohibited user to access shared folder
  7. Tried using WNetUseConnection with both user prompt and without (neither works)
  8. FolderPicker or FileOpenPicker but these seem to be disabled for IoT Core (https://ms-iot.github.io/content/en-US/win10/UnavailableApis.htm).

Thanks in advance,

Paul.

Armandinaarmando answered 12/10, 2015 at 21:40 Comment(6)
Have you tried using the remote machines IP address in the UNC path instead of the computer name? You might be having a name resolution issue. \\ipaddress\sharename instead of \\computername\sharename ?Joellenjoelly
Yeah tried ip address where relevant above, along with other variations, \c$\ for instance.Armandinaarmando
Can you try mapping the share as a netwerkdrive first (e.g through the dos-command net use) and then accessing it by its local drive letter? I don't have a Pi closeby to test this out right now.Jorgenson
I'm sure i tried that at the time, but am tempted to give it another goArmandinaarmando
I'm interrested in this as well. Did you manage to resolve this issue ?Smoodge
I'm afraid I left it and sourced the files from google drive using their api, sorry.Armandinaarmando
B
1

Have you tried impersonation yet? Here is what I use in one of my projects:

[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();
}
Burushaski answered 3/1, 2017 at 0:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.