Answers:
打开命令提示符或从开始/运行类型输入:
net use \\somecomputeronmynetwork\somelocation$ /delete
您还可以使用以下命令列出“记住的”连接:
net use
net use .../delete
(是的,您也可以在此命令后登录/注销,但是对我来说,重启“ workstationservice”就足够了。)。服务名称:LanmanWorkstation //路径:C:\ WINDOWS \ System32 \ svchost.exe -k NetworkService -p // sc stop lanmanworkstation
sc start lanmanworkstationg
(具有提升的特权)
net use /delete
,无需重新启动LanmanWorkstation,这需要一段时间才能dir \\the\deletedshare
停止显示共享内容。这次产生的二进制搜索对我来说是13秒。当在此期间再次访问共享时,似乎延长了该“等待时间”。
打开开始菜单,在搜索栏中键入:
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 $,例如c $。
您可以通过右键单击删除共享,或者 net use x: /delete
但是:这不会删除您的客户端与服务器的假定连接。仅浏览到资源管理器中的服务器就算没有连接共享也不会计数,并且会阻止您使用其他凭据登录该服务器,除非您掩盖了名称。
根据Microsoft的说法,这是一项功能。
要删除到PC的连接,在该PC上访问文件夹并已缓存用户(即保持活动状态),必须严格按照以下步骤操作(逐步):
2关闭机器的所有Windows资源管理器
3打开命令提示符
4执行命令
净用量* / del
***应按此顺序进行,否则无法正常工作。例如,如果命令提示符已经打开(在Windows资源管理器之前),则该命令将不起作用。
尝试此操作,它可能在Windows 7上运行[在XP上运行]。只需在开始->运行->控制keymgr.dll中键入此内容,
它将打开一个窗口,在该窗口中将存储所存储的密码和用户名,您可以从此处删除。
Windows 7的所有保存的密码都保存在凭据管理器中。
控制面板\所有控制面板项目\凭据管理器
如果使用网络位置的用户名和密码进行身份验证,则该用户名和密码将保留在登录会话中。您需要先注销然后重新登录,然后才能重新进行身份验证。
net use
上面的答案。通过Windows资源管理器访问网络共享所使用的凭据不会存储在凭据管理器中。
Remember this
在提供凭据时选中该复选框,它将被存储在此处。但是,默认情况下未选中该框。但是,您的答案具有误导性,因为您无需关闭登录会话即可重新进行身份验证。
我还从@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的替代,这是关于API的简单C#教程:
以编程方式映射驱动器号:
net use
以查看连接列表,然后选择一个连接并添加/ delete参数,如Nate建议的那样。