15,471
社区成员
发帖
与我相关
我的任务
分享
typedef struct tagRmoteDisk {
TCHAR *lpRmote;
TCHAR *lpUser;
TCHAR *lpPassword;
}RMOTE_DISK;
typedef CArray<RMOTE_DISK>CRmoteDiskArray;
BOOL ReadRmoteMapConfig(CRmoteDiskArray& array)
{
TCHAR szPath[512];
if ( GetModuleFileName( NULL, szPath, 512 ) == 0 )
return FALSE;
PathRemoveFileSpec(szPath);
PathAppend(szPath,"ftcs.ini");
TCHAR szBuffer[1024*200],*p;
GetPrivateProfileSection("Rmote Disk Map",szBuffer,1024*200,szPath);
CString strLine;
RMOTE_DISK disk;
p = szBuffer;
while(*p)
{
int curPos = 0;
strLine = p;
ZeroMemory(&disk,sizeof(RMOTE_DISK));
disk.lpRmote = StrDup(strLine.Tokenize(" ",curPos));
if (curPos==-1)
break;
disk.lpUser = StrDup(strLine.Tokenize(" ",curPos));
if (curPos==-1)
break;
disk.lpPassword = StrDup(strLine.Tokenize(" ",curPos));
if (curPos==-1)
break;
p += strLine.GetLength() + 1;
array.Add(disk);
}
DWORD dwResult;
NETRESOURCE nr;
nr.dwScope = RESOURCE_GLOBALNET;
nr.dwType = RESOURCETYPE_DISK;
nr.dwUsage = RESOURCEUSAGE_CONNECTABLE;
nr.dwDisplayType = RESOURCEDISPLAYTYPE_GENERIC;
nr.lpComment = NULL;
nr.lpLocalName = NULL;
nr.lpProvider = NULL;
for (int i=0;i<array.GetCount();i++)
{
RMOTE_DISK & disk1 = array.GetAt(i);
if (disk1.lpPassword == NULL && disk1.lpUser == NULL
&& !PathIsNetworkPath(disk1.lpRmote))
continue;
nr.lpRemoteName = disk1.lpRmote;
dwResult = WNetAddConnection2(&nr,disk1.lpPassword,disk1.lpUser,CONNECT_UPDATE_PROFILE);
if (dwResult != ERROR_ALREADY_ASSIGNED && dwResult != ERROR_DEVICE_ALREADY_REMEMBERED &&
dwResult != NO_ERROR)
{
slog(0,"FTCS Could not map remote disk '%s',%x",nr.lpRemoteName,dwResult);
return FALSE;
}
}
return TRUE;
}