ฉันได้ค้นพบจากคำตอบของ @ 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 - สำหรับ Windows 32 และ 64 บิต:
เป็นทางเลือกแทน C นี่คือการสอน C # แบบง่าย ๆ บน API:
net use
เพื่อดูรายการการเชื่อมต่อจากนั้นเลือกการเชื่อมต่อและเพิ่มอาร์กิวเมนต์ / ลบตามที่ Nate แนะนำ