How To Enumerate Network Connections (119216)



The information in this article applies to:

  • Microsoft Win32 Software Development Kit (SDK) 3.1
  • Microsoft Win32 Software Development Kit (SDK) 3.5
  • Microsoft Win32 Software Development Kit (SDK) 3.51
  • Microsoft Win32 Software Development Kit (SDK) 4.0

This article was previously published under Q119216

SUMMARY

From the MS-DOS prompt, you can enumerate the network connections (drives) by using the following command:

net use

Programmatically, you would call WNetOpenEnum() to start the enumeration of connected resources and WNetEnumResources() to continue the enumeration.

MORE INFORMATION

The following sample code enumerates the network connections.

NOTE: You must link with mpr.lib for the linker to resolve the WNet* calls, as mentioned in Microsoft Knowledge Base article

102381 INFO: Location of WNet* API Functions

Sample Code

   #include <windows.h>
   #include <stdio.h>

   void main()
   {
      DWORD dwResult;
      HANDLE hEnum;
      DWORD cbBuffer = 16384;
      DWORD cEntries = 0xFFFFFFFF;
      LPNETRESOURCE lpnrDrv;
      DWORD i;

      dwResult = WNetOpenEnum( RESOURCE_CONNECTED,
                               RESOURCETYPE_ANY,
                               0,
                               NULL,
                               &hEnum );

      if (dwResult != NO_ERROR)
      {
         printf( "\nCannot enumerate network drives.\n" );
         return;
      }

      printf( "\nNetwork drives:\n\n" );

      do
      {
         lpnrDrv = (LPNETRESOURCE) GlobalAlloc( GPTR, cbBuffer );

         dwResult = WNetEnumResource( hEnum, &cEntries, lpnrDrv, &cbBuffer
   );

         if (dwResult == NO_ERROR)
         {
            for( i = 0; i < cEntries; i++ )
            {
               if( lpnrDrv[i].lpLocalName != NULL )
               {
                  printf( "%s\t%s\n", lpnrDrv[i].lpLocalName,
                                      lpnrDrv[i].lpRemoteName );
               }
            }
         }
         else if( dwResult != ERROR_NO_MORE_ITEMS )
         {
            printf( "Cannot complete network drive enumeration" );
            GlobalFree( (HGLOBAL) lpnrDrv );
            break;
         }
         GlobalFree( (HGLOBAL) lpnrDrv );
      }
      while( dwResult != ERROR_NO_MORE_ITEMS );

      WNetCloseEnum(hEnum);
   }
				

Modification Type:MinorLast Reviewed:7/1/2004
Keywords:kbAPI kbnetwork kbWNet KB119216