Results 1 to 4 of 4

Thread: [2.0] Getting Remote from net use

  1. #1

    Thread Starter
    Addicted Member jordan23's Avatar
    Join Date
    Dec 2002
    Posts
    166

    [2.0] Getting Remote from net use

    How do I get the remote portion from the net use from a command prompt in C#? I can get the drives from System.Environment.GetLogicalDrives, but I need the full paths/server names. Thanks.

  2. #2
    I'm about to be a PowerPoster! Hack's Avatar
    Join Date
    Aug 2001
    Location
    Searching for mendhak
    Posts
    58,333

    Re: [2.0] Getting Remote from net use

    Does this help?

  3. #3

    Thread Starter
    Addicted Member jordan23's Avatar
    Join Date
    Dec 2002
    Posts
    166

    Re: [2.0] Getting Remote from net use

    No, but thanks Hack. It gives me my machine name, etc. I need to know the machine name and paths of the drive letters that are mapped. I need the Remote part from "net use". I can give you an example below.



    Status Local Remote Network

    --------------------------------------------------------------------------
    OK G: \\myserver1\myMain\ Microsoft Windows Network
    OK I: \\myserver2\myMain\ Microsoft Windows Network

  4. #4
    Frenzied Member axion_sa's Avatar
    Join Date
    Jan 2002
    Location
    Joburg, RSA
    Posts
    1,724

    Re: [2.0] Getting Remote from net use

    First, we need something to store the info in:
    Code:
    public class NetworkFolder
    {
    	private string _drive;
    	private string _unc;
    
    	public string Drive
    	{
    		get { return _drive; }
    	}
    
    	public string Unc
    	{
    		get { return _unc; }
    	}
    
    	public NetworkFolder(string drive, string unc)
    	{
    		_drive = drive;
    		_unc = unc;
    	}
    }
    Then using results from here, particularly http://www.thescripts.com/forum/thread248531.html
    Code:
    public class LogicalDriveHelper
    {
    	[DllImport("mpr.dll")]
    	private static extern int WNetGetUniversalName(string lpLocalPath, int dwInfoLevel, ref UNIVERSAL_NAME_INFO lpBuffer, ref int lpBufferSize);
    
    	[DllImport("mpr", CharSet = CharSet.Auto)]
    	protected static extern int WNetGetUniversalName(string lpLocalPath, int dwInfoLevel, IntPtr lpBuffer, ref int lpBufferSize);
    
    	[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    	public static extern uint GetDriveType(string lpRootPathName);
    
    	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    	private struct UNIVERSAL_NAME_INFO
    	{
    		[MarshalAs(UnmanagedType.LPTStr)]
    		public string lpUniversalName;
    	}
    
    	private const int NO_ERROR = 0;
    	private const int ERROR_MORE_DATA = 234;
    	private const int ERROR_NOT_CONNECTED = 2250;
    	private const int UNIVERSAL_NAME_INFO_LEVEL = 1;
    
    	private const uint DRIVE_UNKNOWN = 0;		// Unknown drive type
    	private const uint DRIVE_NO_ROOT_DIR = 1;	// Invalid root path was given to the function
    	private const uint DRIVE_REMOVABLE = 2;		// Removeable drive like a floppy
    	private const uint DRIVE_FIXED = 3;				// Fixed drive like a hard disk
    	private const uint DRIVE_REMOTE = 4;			// Network drive
    	private const uint DRIVE_CDROM = 5;				// CD-ROM drive
    	private const uint DRIVE_RAMDISK = 6;			// RAM disk
    
    	public static NetworkFolder[] List()
    	{
    		string[] logicalDrives = Environment.GetLogicalDrives();
    		List<NetworkFolder> networkFolders = new List<NetworkFolder>(logicalDrives.Length);
    		
    		foreach (string logicalDrive in logicalDrives)
    		{
    			if (IsNetworkDrive(logicalDrive))
    			{
    				string uncPath = GetUncPath(logicalDrive);
    				networkFolders.Add(new NetworkFolder(logicalDrive, uncPath));
    			}
    		}
    
    		networkFolders.TrimExcess();
    
    		return networkFolders.ToArray();
    	}
    
    	private static bool IsNetworkDrive(string drive)
    	{
    		uint type = GetDriveType(drive);
    		return (type == DRIVE_REMOTE);
    	}
    
    	private static string GetUncPath(string mappedDrive)
    	{
    		UNIVERSAL_NAME_INFO nameInfo = new UNIVERSAL_NAME_INFO();
    		int bufferSize = Marshal.SizeOf(nameInfo);
    		int getUncNameResult = WNetGetUniversalName(mappedDrive, UNIVERSAL_NAME_INFO_LEVEL, ref nameInfo, ref bufferSize);
    
    		if (getUncNameResult == ERROR_MORE_DATA)
    		{
    			IntPtr pBuffer = Marshal.AllocHGlobal(bufferSize);
    
    			try
    			{
    				getUncNameResult = WNetGetUniversalName(mappedDrive, UNIVERSAL_NAME_INFO_LEVEL, pBuffer, ref bufferSize);
    
    				if (getUncNameResult == NO_ERROR)
    					nameInfo = (UNIVERSAL_NAME_INFO) Marshal.PtrToStructure(pBuffer, typeof(UNIVERSAL_NAME_INFO));
    			}
    			finally
    			{
    				Marshal.FreeHGlobal(pBuffer);
    			}
    		}
    
    		if (getUncNameResult == NO_ERROR)
    			return nameInfo.lpUniversalName;
    
    		return string.Empty;
    	}
    }
    Usage:
    Code:
    NetworkFolder[] networkFolders = LogicalDriveHelper.List();
    foreach (NetworkFolder folder in networkFolders)
    {
    	Console.WriteLine("{0}\t{1}", folder.Drive, folder.Unc);
    }

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width