Я не знаю, как напрямую это соотносится с вашими потребностями, но это фрагмент кода олицетворения, который я использовал в приложении, которое обращается к реестру и файловой системе удаленных компьютеров с действительными учетными данными. Метод LogonUser принимает в качестве аргументов имя пользователя и имя сервера, которые вы можете передать через приложение winform.
edit Вам потребуется настроить форму межпроцессного взаимодействия между вашим приложением winform и службами, работающими на отдельных компьютерах. Мои извинения Я думал, что это вопрос о том, как выдать себя за роль, а не о том, как отправить информацию в ваш процесс. Что касается методов для IPC, есть довольно много вариантов. Взгляните на этот сайт , он предоставит гораздо больше информации, чем я. Ваша лучшая ставка будет использовать именованные каналы.
[DllImport("advapi32.dll",EntryPoint = "LogonUser", SetLastError = true)]
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword,
int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
IntPtr admin_token = IntPtr.Zero;
WindowsIdentity wid = WindowsIdentity.GetCurrent();
WindowsIdentity wid_admin;
WindowsImpersonationContext wic;
if (LogonUser(user, servername, pass, 9, 0, ref admin_token))
{
wid_admin = new WindowsIdentity(admin_token);
wic = wid_admin.Impersonate();
//do stuff with new creds here
}