Abra um prompt de comando ou do tipo start / run:
net use \somecomputeronmynetwork\somelocation$ /delete
Você também pode usar o seguinte comando para listar as conexões "lembradas":
net use
Eu apenas tentei acessar uma pasta assim:
\somecomputeronmynetwork\somelocation$
Ao ir para esse local, sou solicitado a fornecer um nome de usuário e senha.
Eu coloquei um, e ele me deixou bem.
Agora, preciso remover esse login para que eu possa tentar um nome de usuário e senha diferentes.
Qual é a maneira mais fácil de fazer isso?
Abra o menu Iniciar, no tipo de barra de pesquisa:
manage passwords
Não funcionará se o seu Windows não tiver senha de login, então coloque uma senha nele
O Windows tenta impedir o logon no mesmo servidor com credenciais diferentes ao mesmo tempo, por algum "motivo de segurança" obscuro.
Essa interceptação acontece no lado do cliente, não no lado do servidor.
Você pode contornar isso usando o endereço IP do servidor em vez do nome do servidor. Pessoalmente, faço isso na linha de comando:
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
Dessa forma, você pode até se conectar duas vezes ao mesmo compartilhamento, com credenciais diferentes. Incrivelmente útil quando você tenta depurar problemas de permissão do usuário no computador do usuário. Até funciona para se conectar, digamos c $, no seu computador com direitos de administrador.
Você remove um compartilhamento ou clica nele com o botão direito ou net use x: /delete
Mas: Isso não remove a conexão presumida do cliente ao servidor. Basta navegar até o servidor no explorador, mesmo sem conectar um compartilhamento, e impedir que você use outra credencial para efetuar logon nesse servidor, a menos que você disfarce o nome.
Segundo a Microsoft, isso é um recurso.
Para remover uma conexão com um PC onde foi feito para acessar uma pasta e o Usuário foi armazenado em cache (ou seja, permanecer ativo), deve-se usar rigorosamente o seguinte procedimento (passo a passo):
2 Feche todas as janelas do explorador da máquina
3 Abra o prompt de comando
4 Execute o comando
Net use * /del
*** Deve ser feito nesta sequência, caso contrário não funciona. Por exemplo, se o prompt de comando já estiver aberto (antes do explorador do Windows), o comando não funcionará.
Tente isso, pode funcionar no Windows 7 [funciona no XP].
Basta digitar isso no menu Iniciar > Executar > control keymgr.dll
Vai abrir uma janela onde na senha armazenada & nomes de usuários serão armazenados, você poderá excluir de lá.
Todas as senhas salvas do Windows 7 são salvas no Gerenciador de Credenciais.
Painel de Controle \ Todos os Itens do Painel de Controle \ Gerenciador de Credenciais
Se você autenticar com um nome de usuário e senha para um local de rede, esse nome de usuário e senha permanecerão em cache para sua sessão de logon. Você precisará fazer logoff e voltar a usar antes de poder autenticar novamente.
Eu uso credenciais falsas para realmente desabilitar o acesso.
net use * /d /y
net use "\10.0.0.5\c$" "badpassword" /user:"baduser"
net use * /d /y
que parece sobrescrever as credenciais antigas e forçar o explorador a tentar usar as novas credenciais ruins.
Eu também descobri em @responde do rocketsarefast que o Windows limpará as credenciais de rede antigas quando houver uma nova tentativa de login.
No entanto, seu comando net use "\10.0.0.5\c$" "badpassword" /user:"baduser"
é muito lento, especialmente quando o cliente precisa esperar vários segundos até que o servidor responda com uma rejeição, o que é terrível e inconveniente.
Para meu caso de uso, consegui usar a API do Win32 para mapear o compartilhamento de rede \Server\Share
para a unidade S:\
. Ele desconecta a unidade primeiro e, em seguida, solicita ao usuário a caixa de diálogo de login da rede do Windows para que a pessoa possa fazer logout e login como um usuário diferente.
Aqui está o código 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;
}
Aqui está o 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)
Compile usando MinGW-w64 - para Windows de 32 e 64 bits:
Como uma alternativa ao C, aqui está um tutorial fácil em C # sobre a API:
Mapeando uma letra de unidade por programação:
No Windows 10 (Powershell 5+), você também pode usar Remove-SmbMapping
.
Remove-SmbMapping -RemotePath \somecomputeronmynetwork\somelocation$
Confira também Get-Command *Smb*
.