text: import win32api
  import win32wnet
  import sys
  from winnetwk import *
  import os
  
  possible_shares = []
  
  def _doDumpHandle(handle, level = 0):
  		indent = " " * level
  		while 1:
  			items = win32wnet.WNetEnumResource(handle, 0)
  			if len(items)==0:
  				break
  			for item in items:
  				try:
  					if item.dwDisplayType == RESOURCEDISPLAYTYPE_SHARE:
  						print indent + "Have share with name:", item.lpRemoteName
  						possible_shares.append(item)
  					elif item.dwDisplayType == RESOURCEDISPLAYTYPE_GENERIC:
  						print indent + "Have generic resource with name:", item.lpRemoteName
  					else:
  						# Try generic!
  						print indent + "Enumerating " + item.lpRemoteName,
  						k = win32wnet.WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,0,item)
  						print
  						_doDumpHandle(k, level + 1)
  						win32wnet.WNetCloseEnum(k) # could do k.Close(), but this is a good test!
  				except win32wnet.error, details:
  					print indent + "Couldn't enumerate this resource: " + details.strerror
  
  def TestOpenEnum():
  	print "Enumerating all resources on the network - this may take some time..."
  	handle = win32wnet.WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,None)
  
  	try:
  		_doDumpHandle(handle)
  	finally:
  		handle.Close()
  	print "Finished dumping all resources."
  
  def findUnusedDriveLetter():
  	existing = [x[0].lower() for x in win32api.GetLogicalDriveStrings().split('\0') if x]
  	handle = win32wnet.WNetOpenEnum(RESOURCE_REMEMBERED,RESOURCETYPE_DISK,0,None)
  	try:
  		while 1:
  			items = win32wnet.WNetEnumResource(handle, 0)
  			if len(items)==0:
  				break
  			xtra = [i.lpLocalName[0].lower() for i in items if i.lpLocalName]
  			existing.extend(xtra)
  	finally:
  		handle.Close()
  	for maybe in 'defghijklmnopqrstuvwxyz':
  		if maybe not in existing:
  			return maybe
  	raise RuntimeError("All drive mappings are taken?")
  
  def TestConnection():
  	if len(possible_shares)==0:
  		print "Couldn't find any potential shares to connect to"
  		return
  	localName = findUnusedDriveLetter() + ':'
  	for share in possible_shares:
  		print "Attempting connection of", localName, "to", share.lpRemoteName
  		try:
  			win32wnet.WNetAddConnection2(share.dwType, localName, share.lpRemoteName)
  		except win32wnet.error, details:
  			print "Couldn't connect: " + details.strerror
  			continue
  		# Have a connection.
  		try:
  			fname = os.path.join(localName + "\\", os.listdir(localName + "\\")[0])
  			try:
  				print "Universal name of '%s' is '%s'" % (fname, win32wnet.WNetGetUniversalName(fname))
  			except win32wnet.error, details:
  				print "Couldn't get universal name of '%s': %s" % (fname, details.strerror)
  			print "User name for this connection is", win32wnet.WNetGetUser(localName)
  		finally:
  			win32wnet.WNetCancelConnection2(localName, 0, 0)
  		# and do it again, but this time by using the more modern
  		# NETRESOURCE way.
  		nr = win32wnet.NETRESOURCE()
  		nr.dwType = share.dwType
  		nr.lpLocalName = localName
  		nr.lpRemoteName = share.lpRemoteName
  		win32wnet.WNetAddConnection2(nr)
  		win32wnet.WNetCancelConnection2(localName, 0, 0)
  
  		# and one more time using WNetAddConnection3
  		win32wnet.WNetAddConnection3(0, nr)
  		win32wnet.WNetCancelConnection2(localName, 0, 0)
  
  		# Only do the first share that succeeds.
  		break
  
  def TestGetUser():
  	u = win32wnet.WNetGetUser()
  	print "Current global user is", repr(u)
  	if u != win32wnet.WNetGetUser(None):
  		raise RuntimeError("Default value didnt seem to work!")
  
  TestGetUser()
  TestOpenEnum()
  TestConnection()
  