Как программно добавить сопоставленные сетевые пароли (WinXP)? - PullRequest
2 голосов
/ 14 октября 2008

В WinXP (SP2) вы можете хранить сопоставленные сетевые пароли ...

Пуск-> Панель управления-> Учетные записи пользователей-> Выберите один, затем выберите «Управление моими паролями сети» из связанных задач.

У меня обычно около 25-30 серверов, сопоставленных таким образом с несколькими различными учетными записями / доменами. Проблема в том, что в какой-то момент во время наших обновлений политики они стираются, и это настоящая PITA, чтобы добавить их всех обратно.

Кто-нибудь знает, как добавить их программно, используя какой-нибудь сценарий?

Просто чтобы уточнить, конечной целью является не сопоставление дисков, а создание записей в этом разделе. Это позволяет нам использовать проверку подлинности Windows для подключения к нашим серверам (через Dameware, SSMS и т. Д.).

Добавление:

Подсказка Марка CredWrite привела меня сюда ...

pinvoke.net - CredWrite (advapi32)

Что, в свою очередь, привело меня сюда ...

Блог Peer Channel - Безопасность пароля приложения

Оба оказались очень полезными.

Ответы [ 2 ]

3 голосов
/ 14 октября 2008
  • cmdkey.exe - это CLI-версия инструмента, но я считаю, что она включена только в Win2003 +. Я подозреваю, что копия в XP подойдет, но может нарушить ваше лицензионное соглашение.
  • net use также имеет опцию savecred, если вы подключаете диски
  • Согласно этой довольно подробной информации , CredMgr хранит свою базу данных в 2 местах. Может быть достаточно просто сделать резервную копию этих файлов:
    • % APPDATA% \ Microsoft \ Credentials \% UserSID% \ Credentials
    • % USERPROFILE% \ Локальные настройки \ Данные приложения \ Microsoft \ Credentials \% UserSID% \ Credentials
  • Существует API для чтения учетных данных, CredEnumerate - но нет непосредственного очевидного способа добавить свой собственный. Пара кандидатов:
    • CredWrite принимает обычный CREDENTIAL , но ничего не указывает на сохранение после текущего сеанса.
    • CredUIStoreSSOCredW принимает параметр bPersist - но задает «область» вместо расположения сервера или сети.

Редактировать: Д'Ох. Я пропустил участника PERSIST CREDENTIAL . Это может быть одно из следующих значений:

  • CRED_PERSIST_SESSION: Учетные данные сохраняются в течение всего сеанса входа. Он не будет виден другим сеансам входа в систему этого же пользователя. Он не будет существовать после выхода и повторного входа этого пользователя.
  • CRED_PERSIST_LOCAL_MACHINE: Учетные данные сохраняются для всех последующих сеансов входа в систему на этом же компьютере. Он виден другим сеансам входа в систему этого же пользователя на этом же компьютере и не виден для сеансов входа в систему этого пользователя на других компьютерах. (Это то, что хранится в файле локальных настроек)
  • CRED_PERSIST_ENTERPRISE: Учетные данные сохраняются для всех последующих сеансов входа в систему на этом же компьютере. Он виден другим сеансам входа этого же пользователя на этом же компьютере и сеансам входа этого пользователя на других компьютерах. Эта опция может быть реализована как локально сохраненные учетные данные, если администратор или пользователь настраивает учетную запись пользователя, чтобы она не находилась в состоянии роуминга. Например, если у пользователя нет перемещаемого профиля, учетные данные будут сохраняться только локально. (Это то, что хранится в AppData)

Похоже, CredWrite - это API, который вы хотите.

1 голос
/ 14 октября 2008

NET USE (команда) и WshNetwork.MapNetworkDrive (хост сценариев Windows) - это два распространенных способа создания сценариев сопоставления сетевых дисков, оба позволяют указать пользователя и пароль.
Я не знаю, как это будет работать / не работать с сохраненными паролями, как вы сказали, за исключением того, что вы знаете, что если вы оставите пользовательский параметр пустым, он попытается использовать учетные данные текущего пользователя.

...