J'ai également découvert de La réponse de @rocketsarefast que Windows efface les anciennes informations d'identification du réseau lors d'une nouvelle tentative de connexion.
Cependant, son net use "\\10.0.0.5\c$" "badpassword" /user:"baduser"
est beaucoup trop lente, surtout lorsque le client doit attendre jusqu'à plusieurs secondes que le serveur réponde par un rejet, ce qui est terrible et peu pratique.
Dans mon cas, j'ai pu utiliser l'API Win32 pour mapper le partage réseau. \\Server\Share
à la S:\
conduire. Il déconnecte d'abord le disque et invite ensuite l'utilisateur à utiliser la boîte de dialogue de connexion au réseau Windows afin que la personne puisse se déconnecter et se connecter sous un autre nom d'utilisateur.
Voici le code 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;
}
Voici le 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)
Compilez en utilisant MinGW-w64 - pour Windows 32 et 64 bits :
Comme alternative au C, voici un tutoriel C# facile sur l'API :