Ситуация следующая: есть 2 сервера — Server1, на нем есть расшаренная для пользователя custom_User (который тоже с этого сервера) папка CustomImages.
Второй сервер — Server2, на нем исполняется код, который делая impersonation должен добраться до содержимого папки CustomImages.
Код выглядит так:
// тут импортится функция LogonUser из advapi32.dll
а в мэйн-функции написано так:
tokenHandle = IntPtr.Zero;
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;
// ---- Step — 1
// Call LogonUser to obtain a handle to an access token.
bool returnValue = LogonUser(
@"\\server1\custom_User",
null, //no domain
"password",
LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT,
ref tokenHandle);
// ---- Step — 2
WindowsIdentity newId = new WindowsIdentity(tokenHandle);
// ---- Step — 3
WindowsImpersonationContext context = newId.Impersonate();
И это не работает. Мессага эксэпшена Token cannot be zero — на step 2.
Т.е. не может залогиниться. Почему? Возможно ли это в принципе? Если да, то 1) что я делаю не так? 2) может какие-то политики нужно настраивать?
Код работает, если я использую логин\пароль локального пользователя с сервера Server2.