Как получить доступ к сети Share от малины Pi, использующей IoT Core в приложении UWP

У меня есть приложение С# UWP, которое я намереваюсь запускать на PIP малины с Windows 10 IoT Core. Проблема заключается в том, что я пытаюсь подключиться к UNC-ресурсу для копирования некоторых файлов.

Сеть - это только домашняя сеть с локальными учетными данными пользователя, общий доступ находится на другом компьютере в той же сети.

При запуске приложения локально я могу просто использовать await StorageFolder.GetFolderFromPathAsync(@"\\share\folder"); для подключения к общему ресурсу, и это работает отлично, я предполагаю, что это связано с тем, что учетные данные, которые я использую, сохраняются на локальной машине. При запуске RPi полученная ошибка: "Система не может найти указанный файл".

Есть ли у кого-нибудь идеи о том, как я буду подключаться к этому диску, я играю для чего-либо на этом этапе, чтобы заставить его работать...

Что я пробовал:

  • Share имеет разрешения для всех и может быть доступен без учетных данных
  • Сетевой экран сетевого компьютера отключен.
  • манифест имеет частные сети, корпоративную аутентификацию и настройку Интернета (оба), предполагая, что это нормально, поскольку работает локально.
  • await StorageFolder.GetFolderFromPathAsync(@"\\share\folder"); ( "Система не может найти указанный файл." )
  • Использование powershell с net use "\\share\folder" "password" /USER:"user" работает и unc можно просмотреть
  • Пробовал использовать WNetAddConnection2, как в Предотвратить класс WNetAddConnection2, который запрещает пользователю доступ к общей папке
  • Пробовал использовать WNetUseConnection как с приглашением пользователя, так и без него (ни один из них не работает)
  • FolderPicker или FileOpenPicker, но они, похоже, отключены для IoT Core (https://ms-iot.github.io/content/en-US/win10/UnavailableApis.htm).

Спасибо заранее,

Павел.

Ответы

Ответ 1

Вы еще пробовали олицетворять? Вот что я использую в одном из моих проектов:

[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();
}