Mounting Network Drives

Environment: Windows 95, Visual C++ 6

We had a need for users to not tie up file sharing licenses all day when not needed.

Since they only needed the network drive mounted for one app, I embedded routines in the app to automatically check for the drive non-existence, prompt for password, and mount the drive.

I created the password screen exactly the same as the one NT shows for mounting drives. Then I created the wrapped class for it, called CDriveMountDlg.

In the application Doc.cpp, I check for a folder on the network drive. If it exists, fine, do nothing. Otherwise, call the CDriveMountDlg, and get the password.

I begin a loop of drive letters, attempting to mount the network drive for each one until successful, or I run out of letters. I save the letter for unmounting later.

#include <io.h&gt


BOOL CMounterDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;

// Check if \\APPS1\data is mounted
// -1 means failed
if( (_access( “\\\\apps1\\data\\parcel”, 0 )) == -1 )
{
CDriveMountDlg dlg;
int response = dlg.DoModal();
if (response == IDCANCEL)
return FALSE;

NETRESOURCE resource;
resource.dwType = RESOURCETYPE_ANY;
resource.lpRemoteName = “\\\\apps1\\data”;
resource.lpProvider = NULL;

int nDrive = 4;
CString sDrive;

sDrive.Format(“%c:”, nDrive + ‘A’);
resource.lpLocalName = sDrive.GetBuffer(2);

DWORD result = WNetAddConnection2(&resource,
(LPCSTR)dlg.m_sPassword, NULL, 0);

while ((result != 0) && (nDrive < 25)) { nDrive++; sDrive.Format("%c:", nDrive + 'A'); result = WNetAddConnection2(&resource, (LPCSTR)dlg.m_sPassword, NULL, 0); } if (result != 0) { AfxMessageBox("Unable to find a free drive. Aborting."); return FALSE; } m_sDrive = sDrive; m_bMountFlag = TRUE; } }

When the application exits, it calls OnCloseDocument



void CMounterDoc::OnCloseDocument()
{
      if (m_bMountFlag)
      {
         DWORD result = WNetCancelConnection2(m_sDrive,
		  0, TRUE);

         if (result != NO_ERROR)
         {
         // Error handling here
         }
      }
   CDocument::OnCloseDocument();
}

Finally, add the file mpr.lib to the project.

WNetAddConnection2 is also supposed to handle empty drive letter strings, creating an invisible connection. This works, although I was unable to disconnect later. Any solutions to this problem would be appreciated.

Downloads

Download demo project – 18 Kb

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read