Проблемы с пользователем / паролем при GetVolumeNameForVolumeMountPoint () (подключение удаленного диска Windows?)

От рабочей станции Vista у меня есть подключенный компьютер XP Embedded, на котором я хочу программно смонтировать том локально (например, смонтировать XP Embedded \\MyXPEmbedded\C:\some\path\ на рабочую станцию ​​Vista (смонтированную на C:\mounted_XPEmbedded\).

(Это административная утилита, которая запускается на рабочей станции Vista и обслуживает файлы на рабочей станции XP Embedded, которая является частью более крупного устройства.)

Я могу видеть компьютер XP Embedded с рабочей станции Vista. Например, я могу ::getnameinfo() разрешить имя компьютера XP Embedded по его IP-адресу.

Однако все вызовы GetVolumeNameForVolumeMountPoint() терпят неудачу (возвращает false), а форматированное сообщение от ::GetLastError():

Logon failure: unknown user name or bad password

Итак, очевидно, что это проблема с разрешениями. Однако я не вижу обсуждения в API Microsoft того, как я могу предоставить пользователя / пароль через эти API пути GUID тома.

При "просмотре" XP Embedded из проводника Windows на рабочей станции Vista путем ввода IP-адреса компьютера XP Embedded в адресную строку, мне предлагается ввести имя пользователя и пароль, после чего я могу видеть все на XP Embedded. (Ага! Как мне предоставить это программно?)

ВОПРОС: Как я могу программно указать логин и пароль пользователя при работе с API-интерфейсами GUID path (и, в частности, ::GetVolumeNameForVolumeMountPoint())?

Частично проблема может заключаться в том, что эти компьютеры не используют один и тот же домен (они не могут, компьютер Vista будет добавлен в домен клиента, XP Embedded должен быть «скрытым»).

Другая информация, которая, вероятно, не важна:

  • Рабочая станция Vista и XP Embedded не используют один и тот же домен (они не могут)
  • Приложение работает на рабочей станции Vista под учетной записью с правами администратора (я полагаю, это требуется?)
  • Эта учетная запись администратора Vista отсутствует на компьютере XP Embedded (XP Embedded имеет другую учетную запись администратора)
  • Часы между обоими компьютерами текущие (учетные данные должны работать)
  • Рабочая станция Vista имеет две сетевые карты, одна карта подключается непосредственно к коробке XP Embedded, в которой только одна сетевая карта.
  • Используя C ++, MSVS2008

БОНУСНЫЙ ВОПРОС: Было бы неплохо, если бы я мог запустить эту административную утилиту на рабочей станции Vista без прав администратора, возможно ли это? (Я знаю административный логин / пароль для встроенной XP.)


person charley    schedule 22.06.2011    source источник


Ответы (2)


Перед попыткой позвоните по адресу WNetAddConnection2 для доступа к общим ресурсам на встроенном ящике. Возможно, вам понадобится имя пользователя в виде MyXPEmbedded\[admin username].

Вы можете столкнуться с проблемами, если ранее уже пытались подключиться к встроенному блоку. Чтобы удалить любые устаревшие соединения, которые вы можете использовать, из командной строки - net use с опцией /delete. Вы также можете поиграть с установкой соединения с использованием сети перед запуском вашей программы в целях отладки.

Что касается запуска без прав администратора, это в основном будет связано с тем, где вы решите сделать локальную точку монтирования, но вы, вероятно, могли бы уйти, просто используя UNC путь. Используя административные общие ресурсы по умолчанию (которые включены, если "использовать простой общий доступ к файлам" отключено), вы можете получить доступ к встроенной системе, используя что-то вроде \\MyXPEmbedded\c$\some\path.

person daalbert    schedule 30.06.2011
comment
Очень полезно, поэтому +100. Я могу подключиться удаленно с помощью WNetAddConnection2(), но ::GetVolumeNameForVolumeMountPoint() все еще имеет ошибку входа в систему (такое же сообщение с именем пользователя и паролем). Но, по крайней мере, на данный момент я могу получить локальную букву диска (мне нужно это исправить, потому что многие наши машины автоматически монтируют все 26 букв дисков, и ни одна из них недоступна). Итак, я все еще открыт для предложений. ;-) - person charley; 02.07.2011

Вероятно, вам потребуется установить хотя бы одно соединение SMB (именованный канал / файловый ресурс) с рабочей станции Vista на рабочую станцию ​​XP на любом общем ресурсе с достаточными правами, например \\ myXP \ something или \\ myXp \ c $, или даже \\ myXP \ icp $, прежде чем можно будет открыть любой сетевой путь, нацеленный на компьютер "myXP".

Вы можете сделать это программно, используя функцию WNetAddConnection2 с именем пользователя и паролем.

person Simon Mourier    schedule 25.06.2011
comment
Успешный монтаж удаленного диска на букву локального диска с WNetAddConnection2() с пользователем / паролем и даже защита удаленного диска без перенаправления на букву локального диска. По-прежнему терпит неудачу с ::GetVolumeNameForVolumeMountPoint(). Я проголосовал за вас (хороший ответ), но дал награду Даллберту за дополнительные подсказки (я все еще работаю над ошибкой входа в систему с тем же сообщением об ошибке). Спасибо за вашу помощь! - person charley; 02.07.2011