Я работаю над программой, которая должна проверить, есть ли соединение с NAS, и возможно ли записывать и считывать данные с него. Проверка соединения не является проблемой.
Я работаю на Windows Server 2012 и знаю учетные данные с NAS.
Я пытался выдать себя за эти учетные данные, но это не сработало. Я всегда получаю одну и ту же ошибку. Неверное имя пользователя или пароль. Но когда я подключаюсь к проводнику Windows с теми же учетными данными, он работает.
Это мой импорт DLL и необходимые переменные
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain,
String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
// Variables
private IntPtr m_Token;
private WindowsImpersonationContext m_Context = null;
private string m_Domain;
private string m_Password;
private string m_Username;
m_Domain отличается от локального домена
Это фактическое олицетворение
m_Token = IntPtr.Zero;
bool logonSuccessfull = LogonUser(
m_Username,
m_Domain,
m_Password,
(int)LOGON32_TYPE_NETWORK,
(int)LOGON32_PROVIDER_WINNT50,
ref m_Token);
if (logonSuccessfull == false)
{
int error = Marshal.GetLastWin32Error();
throw new Win32Exception(error);
}
WindowsIdentity identity = new WindowsIdentity(m_Token);
m_Context = identity.Impersonate();
LOGON32_TYPE_NETWORK равно 3,
LOGON32_PROVIDER_WINNT50 равно 3
Этот код выполняется с правами администратора.
Это ошибка, которая выдается:
System.ComponentModel.Win32Exception (0x80004005): The user name or password is incorrect
Эта ошибка выдается в
if (logonSuccessfull == false)
{
int error = Marshal.GetLastWin32Error();
throw new Win32Exception(error);
}
Есть ли другой способ?
Или вы должны использовать другой LogonType или LogonProvider?
Это я тоже пробовал, но у меня тоже не получалось.
private const int LOGON32_PROVIDER_DEFAULT = 0;
private const int LOGON32_LOGON_INTERACTIVE = 2;
private const int LOGON32_TYPE_NEW_CREDENTIALS = 9;
При использовании LOGON32_TYPE_NEW_CREDENTIALS не выдает ошибку, а
олицетворенный пользователь не меняется вообще.