Как получить доступ к сети 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();
}