Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

WNetEnumResource (mpr)
 
.

WNetEnumResource

C# Signature:

[DllImport("mpr.dll")]
public static extern uint WNetEnumResource(IntPtr hEnum, ref int lpcCount, IntPtr lpBuffer, ref uint lpBufferSize);

VB.NET Signature:

<DllImport("mpr.dll")> _
Public Shared Function WNetEnumResource(hEnum As IntPtr, ByRef lpcCount As Integer, lpBuffer As IntPtr, ByRef lpBufferSize As UInteger) As UInteger
End Function

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

//Coded by Eugene E. Zhukovsky, 8.21.2002

// Added by Kill

//declare the DLL import functions

[DllImport("mpr.dll", CharSet=CharSet.Auto)]
  public static extern int WNetEnumResource(
    IntPtr hEnum,
    ref int lpcCount,
    IntPtr lpBuffer,
    ref int lpBufferSize );

[DllImport("mpr.dll", CharSet=CharSet.Auto)]
  public static extern int WNetOpenEnum(
    RESOURCE_SCOPE dwScope,
    RESOURCE_TYPE dwType,
    RESOURCE_USAGE dwUsage,
    [MarshalAs(UnmanagedType.AsAny)][In] Object lpNetResource,
    out IntPtr lphEnum);

[DllImport("mpr.dll", CharSet=CharSet.Auto)]
  public static extern int WNetCloseEnum( IntPtr hEnum );
//declare the structures to hold info

public enum RESOURCE_SCOPE
{
    RESOURCE_CONNECTED = 0x00000001,
    RESOURCE_GLOBALNET = 0x00000002,
    RESOURCE_REMEMBERED = 0x00000003,
    RESOURCE_RECENT= 0x00000004,
    RESOURCE_CONTEXT= 0x00000005
}

public enum RESOURCE_TYPE
{
    RESOURCETYPE_ANY= 0x00000000,
    RESOURCETYPE_DISK= 0x00000001,
    RESOURCETYPE_PRINT = 0x00000002,
    RESOURCETYPE_RESERVED = 0x00000008,
}

public enum RESOURCE_USAGE
{
    RESOURCEUSAGE_CONNECTABLE =0x00000001,
    RESOURCEUSAGE_CONTAINER=0x00000002,
    RESOURCEUSAGE_NOLOCALDEVICE =0x00000004,
    RESOURCEUSAGE_SIBLING=0x00000008,
    RESOURCEUSAGE_ATTACHED=0x00000010,
    RESOURCEUSAGE_ALL =(RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
}

public enum RESOURCE_DISPLAYTYPE
{
    RESOURCEDISPLAYTYPE_GENERIC= 0x00000000,
    RESOURCEDISPLAYTYPE_DOMAIN= 0x00000001,
    RESOURCEDISPLAYTYPE_SERVER= 0x00000002,
    RESOURCEDISPLAYTYPE_SHARE= 0x00000003,
    RESOURCEDISPLAYTYPE_FILE = 0x00000004,
    RESOURCEDISPLAYTYPE_GROUP= 0x00000005,
    RESOURCEDISPLAYTYPE_NETWORK= 0x00000006,
    RESOURCEDISPLAYTYPE_ROOT = 0x00000007,
    RESOURCEDISPLAYTYPE_SHAREADMIN = 0x00000008,
    RESOURCEDISPLAYTYPE_DIRECTORY = 0x00000009,
    RESOURCEDISPLAYTYPE_TREE = 0x0000000A,
    RESOURCEDISPLAYTYPE_NDSCONTAINER = 0x0000000B
}

public struct NETRESOURCE
{
    public RESOURCE_SCOPE dwScope;
    public RESOURCE_TYPE dwType;
    public RESOURCE_DISPLAYTYPE dwDisplayType;
    public RESOURCE_USAGE dwUsage;
    [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpLocalName;
    [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpRemoteName;
    [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpComment;
    [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpProvider;
}

//the function we'll be calling

public static void WNETOE(Object o)
{
    int iRet;
    IntPtr ptrHandle = new IntPtr();
    try
    {
       iRet =WNetOpenEnum(
       RESOURCE_SCOPE.RESOURCE_GLOBALNET,
       RESOURCE_TYPE.RESOURCETYPE_ANY,
       RESOURCE_USAGE.RESOURCEUSAGE_ALL,
       o,
       out ptrHandle );
       if( iRet != 0 )
       {
     return;
       }

       int entries;
       int buffer = 16384;
       IntPtr ptrBuffer = Marshal.AllocHGlobal( buffer );
       NETRESOURCE nr;
       for(;;)
       {
      entries = -1;
      buffer = 16384;
     iRet =WNetEnumResource( ptrHandle, ref entries, ptrBuffer, ref buffer );
     if( (iRet != 0) || (entries < 1) )
     {
        break;
     }
     Int32 ptr = ptrBuffer.ToInt32();
     for( int i = 0; i < entries; i++ )
     {
        nr = (NETRESOURCE)Marshal.PtrToStructure( new IntPtr(ptr), typeof(NETRESOURCE) );
        if(RESOURCE_USAGE.RESOURCEUSAGE_CONTAINER == (nr.dwUsage
            & RESOURCE_USAGE.RESOURCEUSAGE_CONTAINER))
        {
         //call recursively to get all entries in a container
         WNETOE(nr);
        }
        ptr += Marshal.SizeOf( nr );
        Console.WriteLine( " {0} : LocalName='{1}' RemoteName='{2}'",
        nr.dwDisplayType.ToString(), nr.lpLocalName, nr.lpRemoteName );
     }
       }
       Marshal.FreeHGlobal( ptrBuffer );
       iRet =WNetCloseEnum( ptrHandle );
    }
    catch(Exception e)
    {
    }
}

//now call the function passing a null
WNETOE(null);

//here's some possible error codes
public enum NERR
{
    NERR_Success = 0,/* Success */
    ERROR_MORE_DATA = 234, // dderror
    ERROR_NO_BROWSER_SERVERS_FOUND = 6118,
    ERROR_INVALID_LEVEL = 124,
    ERROR_ACCESS_DENIED = 5,
    ERROR_INVALID_PARAMETER = 87,
    ERROR_NOT_ENOUGH_MEMORY = 8,
    ERROR_NETWORK_BUSY = 54,
    ERROR_BAD_NETPATH = 53,
    ERROR_NO_NETWORK = 1222,
    ERROR_INVALID_HANDLE_STATE = 1609,
    ERROR_EXTENDED_ERROR= 1208
}

Alternative Managed API:

TODO

Documentation

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Find References
Show Printable Version
Revisions