ネットワークドライブへ接続する

LAN上のパソコンやNASなどから公開されているフォルダをドライブとして接続するにはWNetAddConnection2を使う。この関数はネットワークプリンタの接続にも利用できるものだが今回は使い方をネットワークドライブに限定している。

依存環境:ATL
#include <atlstr.h>
#pragma	comment(lib,"Mpr.lib")


//
//	ネットワークドライブの割り当て
//
//bConnectionKeepはfalseだとWindowsを再起動すると接続は回復しない
//
bool	NetDriveConnect(LPCTSTR pszLocalName,LPCTSTR pszRemoteName,bool bConnectionKeep=false)
{
	DWORD		dwRet;
	DWORD		dwFlags;
	NETRESOURCE	sNetResource;
	CAtlStringA	strLocal;
	CAtlStringA	strRemote;

	strLocal	= pszLocalName;
	strRemote	= pszRemoteName;

	//pszLocalNameは「z:」のようにする。末尾は「:」にする
	if(strLocal.Right(1) != ':')
		strLocal += ":";

	//	pszRemoteNameは「\\\\192.168.11.151\\share」のようにする。末尾を「\\」にするのはNG
	if(strRemote.Right(1) == '\\')
		strRemote = strRemote.Left(strRemote.GetLength() - 1);

	ZeroMemory(&sNetResource,sizeof(NETRESOURCE));
	sNetResource.dwType			= RESOURCETYPE_DISK;
	sNetResource.lpLocalName	= strLocal.GetBuffer(0);
	sNetResource.lpRemoteName	= strRemote.GetBuffer(0);

	dwFlags = (bConnectionKeep) ? CONNECT_UPDATE_PROFILE : 0;
	dwRet = ::WNetAddConnection2(&sNetResource,NULL,NULL,dwFlags);

	return	(dwRet == NO_ERROR) ? true : false;
}






void	Test(void)
{
	bool	ret;

	ret = NetDriveConnect(_T("r:"),_T("\\\\192.168.11.151\\share"));

	if(ret)
		::MessageBox(NULL,_T("接続しました"),_T(""),MB_OK);
	else
		::MessageBox(NULL,_T("失敗しました"),_T(""),MB_OK);
}

プロジェクトファイルをダウンロード


カテゴリー「ネットワーク」 のエントリー