Подключение и вход на удаленный рабочий стол с помощью C # / Windows7

Я хотел бы написать приложение, которое позволяет пользователям вводить свои учетные данные для входа в систему для машины в сети нашей компании, а затем подключать их к этой машине. По-видимому, учетные данные для подключения к удаленному рабочему столу больше не сохраняются в файлах * .RDP в Windows7 (и Vista?), Поэтому этот подход не работает. Я знаю, что могу просматривать сохраненные учетные данные с помощью rundll32 keymgr.dll,KRShowKeyMgr, но не могу программно добавить учетные данные в это хранилище. Мы будем очень благодарны за любые указатели или даже примеры кода (желательно на C #, но все идет).


person Matthias    schedule 20.09.2011    source источник
comment
Вы по-прежнему можете поместить пароль в файл .rdp, он по-прежнему будет учитывать их - если нет параметра групповой политики, который явно игнорирует его.   -  person vcsjones    schedule 20.09.2011
comment
Вы совершенно правы. Не могли бы вы повторно опубликовать свой комментарий в качестве ответа, чтобы я мог принять его?   -  person Matthias    schedule 20.09.2011
comment
В ответ добавлено немного больше.   -  person vcsjones    schedule 21.09.2011


Ответы (1)


Вы по-прежнему можете поместить пароль в файл .rdp, он по-прежнему будет учитывать их - если нет параметра групповой политики, который явно игнорирует его.

ИЗМЕНИТЬ:

Как бы то ни было, эта статья немного преувеличивает. Есть управляемая оболочка вокруг всего этого беспорядочного бизнеса P / Invoke. Есть более простые способы сделать это, если вы используете .NET 2.0, используя _ 1_ класс. (Начните с добавления ссылки на сборку System.Security).

После того, как вы добавили эту ссылку, вы можете сделать это:

public string Encrypt(string toEncrypt)
{
    var userData = Encoding.Unicode.GetBytes(toEncrypt ?? String.Empty);
    return "password 51:b:" + ToHexString(ProtectedData.Protect(userData, new byte[0], DataProtectionScope.CurrentUser));
}

private static string ToHexString(byte[] bytes)
{
    if (bytes == null)
    {
        return String.Empty;
    }
    return bytes.Aggregate(new StringBuilder(), (sb, b) => sb.AppendFormat("{0:x2}", b)).ToString();
}

И это все.

person vcsjones    schedule 20.09.2011