J'ai également découvert dans la réponse de @ rocketsarefast que Windows effacerait les anciennes informations d'identification du réseau lors d'une nouvelle tentative de connexion.
Cependant, sa net use "\\10.0.0.5\c$" "badpassword" /user:"baduser"
commande est beaucoup trop lente, en particulier lorsque le client doit attendre plusieurs secondes pour que le serveur réponde en cas de rejet, ce qui est terrible et peu pratique.
Pour mon cas d'utilisation, j'ai pu utiliser l'API Win32 pour mapper le partage réseau \\Server\Share
sur le S:\
lecteur. Il déconnecte d'abord le lecteur, puis invite l'utilisateur à ouvrir la boîte de dialogue de connexion réseau Windows afin que la personne puisse se déconnecter et se connecter en tant qu'utilisateur différent.
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)
Compiler avec MinGW-w64 - pour Windows 32 et 64 bits:
En guise d'alternative au C, voici un didacticiel C # simple sur l'API:
net use
pour voir une liste de connexions, puis choisir une connexion et ajouter l'argument / delete comme suggéré par Nate.