Я просто пытался получить доступ к такой папке:
\\somecomputeronmynetwork\somelocation$
Когда я иду в это место, мне предлагается ввести имя пользователя и пароль.
Я вставил одну, и она меня впустила.
Теперь мне нужно удалить этот логин, чтобы я мог попробовать другое имя пользователя и пароль.
Как это сделать проще всего?
Откройте командную строку или введите команду start / run:
net use \\somecomputeronmynetwork\somelocation$ /delete
Вы также можете использовать следующую команду для вывода списка «запомненных» соединений:
net use
Откройте меню «Пуск», в строке поиска введите:
manage passwords
Это не сработает, если в вашей Windows нет пароля для входа, поэтому введите пароль.
Windows пытается предотвратить одновременный вход на один и тот же сервер с разными учетными данными по какой-то неясной «причине безопасности».
Этот перехват происходит на стороне клиента, а не на стороне сервера.
Вы можете обойти это, используя IP-адрес сервера вместо имени сервера. Лично я делаю это в командной строке:
net use * \\myservername\mysharename /user:mydomain\theotheruser * /persistent:no
==> error - security reasons
net use * \\x.y.z.z'\mysharename /user:mydomain\theotheruser * /persistent:no
==> just fine
Таким образом, вы даже можете дважды подключиться к одному и тому же общему ресурсу с разными учетными данными. Невероятно полезно, когда вы пытаетесь отладить проблемы с разрешениями пользователя с компьютера пользователя. Работает даже для подключения, например, к c $, на вашем собственном компьютере с правами администратора.
Вы удаляете общий ресурс, щелкнув его правой кнопкой мыши или net use x: /delete
Но: это не удаляет предполагаемое соединение вашего клиента с сервером. Просто переход на сервер в проводнике, даже без подключения общего ресурса, считается и не позволяет вам использовать другие учетные данные для входа на этот сервер, если вы не замаскируете имя.
По словам Microsoft, это особенность.
Чтобы удалить соединение с ПК, на котором он был создан для доступа к папке, а пользователь был кэширован (т.е. оставался активным), необходимо неукоснительно использовать следующую процедуру (шаг за шагом):
2 Закройте все окна проводника машины
3 Откройте командную строку
4 Выполните команду
Чистое использование * / del
*** Делать нужно именно в такой последовательности, иначе может не работать. Например, если командная строка уже открыта (до проводника Windows), команда работать не будет.
Попробуйте, это может сработать в Windows 7 [работает в XP]. Просто введите это в Пуск-> Выполнить-> control keymgr.dll
Откроется окно, в котором будут храниться сохраненный пароль и имена пользователей, оттуда вы сможете удалить.
Я использую поддельные учетные данные, чтобы действительно отключить доступ.
net use * /d /y
net use "\\10.0.0.5\c$" "badpassword" /user:"baduser"
net use * /d /y
это, похоже, перезаписывает старые учетные данные и заставляет проводника пытаться использовать новые неверные учетные данные.
Все сохраненные пароли для Windows 7 сохраняются в Credential Manager.
Панель управления \ Все элементы панели управления \ Диспетчер учетных данных
Если вы аутентифицируетесь с использованием имени пользователя и пароля в сетевом расположении, это имя пользователя и пароль останутся в кэше для вашего сеанса входа в систему. Вам нужно будет выйти из системы и снова войти, прежде чем вы сможете повторно пройти аутентификацию.
Я также обнаружил из Ответ @ rocketsarefast что Windows очистит старые сетевые учетные данные при новой попытке входа в систему.
Однако его net use "\\10.0.0.5\c$" "badpassword" /user:"baduser"
команда слишком медленная, особенно когда клиенту приходится ждать несколько секунд, пока сервер ответит отклонением, что ужасно и неудобно.
В моем случае я смог использовать Win32 API для сопоставления общего сетевого ресурса. \\Server\Share
к S:\
водить машину. Сначала он отключает диск, а затем предлагает пользователю диалоговое окно входа в сеть Windows, чтобы человек мог выйти из системы и войти в систему как другой пользователь.
Вот код C main.c
:
#ifndef UNICODE
#define UNICODE
#endif
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#define _WIN32_IE 0x0500
#pragma comment(lib, L"mpr.lib")
#include <windows.h>
//#include <stdio.h>
int wmain(const size_t argc, const wchar_t** argv) {
NETRESOURCE networkResource = {0};
networkResource.dwType = RESOURCETYPE_DISK;
networkResource.lpLocalName = L"S:";
networkResource.lpRemoteName = L"\\\\Server\\Share";
networkResource.lpProvider = NULL;
DWORD result = 0;
result = WNetCancelConnection2(networkResource.lpLocalName, CONNECT_UPDATE_PROFILE, TRUE);
// wprintf(L"WNetCancelConnection2 result: %d\n", result);
result = WNetAddConnection2(&networkResource, NULL, NULL, CONNECT_INTERACTIVE | CONNECT_PROMPT);
// wprintf(L"WNetAddConnection2 result: %d\n", result);
// getchar();
return EXIT_SUCCESS;
}
Здесь CMakeLists.txt
:
cmake_minimum_required(VERSION 3.7)
project(MapNetworkDrive)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c11 -g3 -pedantic -Wall -Wextra -O0")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS} -municode -mwindows")
set(SOURCE_FILES main.c)
add_executable(MapNetworkDrive ${SOURCE_FILES})
target_link_libraries(MapNetworkDrive mpr.lib)
Скомпилируйте с помощью MinGW-w64 - для 32- и 64-битной Windows:
В качестве альтернативы C, вот простой учебник C # по API:
Программное сопоставление буквы диска:
В Windows 10 (Powershell 5+) теперь также можно использовать Remove-SmbMapping
.
Remove-SmbMapping -RemotePath \\somecomputeronmynetwork\somelocation$
Также проверьте Get-Command *Smb*
.
Вы, конечно, можете удалить свое соединение, выполнив
net use \\somemachine\someshare /d
Но вы, вероятно, тоже захотите снова подключиться. Кроме того, если у вас есть кэшированные учетные данные в общей сетевой папке, то при повторном установлении соединения вы можете столкнуться с одной из следующих ошибок:
Произошла системная ошибка 1272.
Вы не можете получить доступ к этой общей папке, потому что политики безопасности вашей организации блокируют неаутентифицированный гостевой доступ. Эти политики помогают защитить ваш компьютер от небезопасных или вредоносных устройств в сети.
или
Произошла системная ошибка 1219.
Множественные подключения к серверу или общему ресурсу одним и тем же пользователем с использованием более одного имени пользователя не допускаются. Отключите все предыдущие подключения к серверу или общему ресурсу и повторите попытку.
Вместо этого я предлагаю решить проблему без перезагрузки, выполнив следующие действия:
net stop workstation
net start workstation
Это имеет дополнительный бонус, хотя вы Отключить любые существующие общие ресурсы, они не будут забыты, как если бы вы удалили их чем-то вроде net use * /d
.
Если вам не нравится командная строка, вы также можете перезапустить службу рабочей станции, перейдя в Сервисы напрямую:
services
, нажмите ВводТогда попробуйте свой net use \\somemachine\someshare /user:someuser
команду еще раз, чтобы получить повторный запрос учетных данных.