#pragma comment(lib, "mpr.lib")
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <Winnetwk.h>
#include <string>
//using namespace std;
int wmain(int argc, wchar_t * argv[]) {
///*
//DWORD WNetAddConnection2W(
// LPNETRESOURCEW lpNetResource,
// LPCWSTR lpPassword,
// LPCWSTR lpUserName,
// DWORD dwFlags
//);
//*/
DWORD dwRetVal;
std::wstring MyRemoteName;
NETRESOURCE nr;
DWORD dwFlags;
MyRemoteName.append(L"\\\\");
if (argc != 5 && argc != 4) {
wprintf(L"Usage: %s <localname> <remotename> <username> <password>\n",argv[0]);
wprintf(L"Usage: %s <remotename> <username> <password>\n",argv[0]);
exit(1);
}
if (argc == 5) {
MyRemoteName.append(argv[2]);
wprintf(L"Calling WNetAddConnection2 with\n");
wprintf(L" lpLocalName = %s\n", argv[1]);
wprintf(L" lpRemoteName = %s\n", MyRemoteName.c_str());
wprintf(L" lpUsername = %s\n", argv[3]);
wprintf(L" lpPassword = %s\n", argv[4]);
// Zero out the NETRESOURCE struct
memset(&nr, 0, sizeof(NETRESOURCE));
// Assign our values to the NETRESOURCE structure.
nr.dwType = RESOURCETYPE_ANY;
nr.lpLocalName = argv[1];
nr.lpRemoteName = (LPWSTR)MyRemoteName.c_str();
nr.lpProvider = NULL;
// Assign a value to the connection options
dwFlags = CONNECT_TEMPORARY; //连接类型 是否可持续
// Call the WNetAddConnection2 function to assign
// a drive letter to the share.
//
dwRetVal = WNetAddConnection2(&nr, argv[4], argv[3], dwFlags);
//
// If the call succeeds, inform the user; otherwise,
// print the error.
//
if (dwRetVal == NO_ERROR)
wprintf(L"Connection added to %s\n", nr.lpRemoteName);
else {
wchar_t * pMsgBuf;
FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS
, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&pMsgBuf, 0, NULL);
wprintf(L"WNetAddConnection2 failed with error: %u, %ls \n", dwRetVal, pMsgBuf);
LocalFree(pMsgBuf);
}
}
else if (argc == 4) {
MyRemoteName.append(argv[1]);
wprintf(L"Calling WNetAddConnection2 with\n");
wprintf(L" lpRemoteName = %s\n", (LPWSTR)MyRemoteName.c_str());
wprintf(L" lpUsername = %s\n", argv[2]);
wprintf(L" lpPassword = %s\n", argv[3]);
// Zero out the NETRESOURCE struct
memset(&nr, 0, sizeof(NETRESOURCE));
// Assign our values to the NETRESOURCE structure.
nr.dwType = RESOURCETYPE_ANY;
nr.lpLocalName = NULL;
nr.lpRemoteName = (LPWSTR)MyRemoteName.c_str();
nr.lpProvider = NULL;
// Assign a value to the connection options
dwFlags = CONNECT_TEMPORARY; //连接类型 是否可持续
// Call the WNetAddConnection2 function to assign
// a drive letter to the share.
//
dwRetVal = WNetAddConnection2(&nr,argv[3], argv[2], dwFlags);
//
// If the call succeeds, inform the user; otherwise,
// print the error.
//
if (dwRetVal == NO_ERROR)
wprintf(L"Connection added to %s\n", nr.lpRemoteName);
else {
wchar_t * pMsgBuf;
FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS
, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&pMsgBuf, 0, NULL);
wprintf(L"WNetAddConnection2 failed with error: %u, %s \n", dwRetVal, pMsgBuf);
LocalFree(pMsgBuf);
}
}
return 0;
}