This API is used to open an enumeration of network resources or existing connections. It must be called to obtain a valid handle for enumeration.
DWORD WNetOpenEnum ( DWORD dwScope, DWORD dwType, DWORD dwUsage, LPNETRESOURCE lpNetResource, LPHANDLE lphEnum );
dwScope
Determines the scope of the enumeration. This can be one of:
RESOURCE_CONNECTED | All currently connected resources - this does not include persistent connections that are not currently available. |
RESOURCE_GLOBALNET | All resources on the network. |
RESOURCE_REMEMBERED | All persistent connections. |
RESOURCE_RECENT | The most recent connections made. |
RESOURCE_CONTEXT | The resources associated with the user's current and default network context. |
dwType
Used to specify the type of resources and level of detail of interest. This is a bit mask which may be any combination of:
RESOURCETYPE_DISK | All disk resources. |
RESOURCETYPE_PRINT | All print resources. |
If dwType is RESOURCETYPE_ANY, all types of resources are returned. If an NP does not have the capability to distinguish between print and disk resources at a level, it may return all resources.
dwUsage
Used to specify the usage of resources of interest. This is a bit mask which may be any combination of:
RESOURCEUSAGE_CONNECTABLE | All connectable resources. |
RESOURCEUSAGE_CONTAINER | All container resources. |
RESOURCEUSAGE_ALL | All resources. |
This field is ignored if dwScope is not RESOURCE_GLOBALNET.
lpNetResource
This specifies the container upon which to perform the enumeration. The NETRESOURCE could have been obtained via WNetEnumResource, constructed by the caller, or NULL. If it is NULL, the logical root of the network is assumed. An application would normally start off by calling WNetOpenEnum with this parameter set to NULL, and then use the returned results for further enumeration. If the calling program knows exactly the NP and remote path to enumerate from, it may build its own NETRESOURCE structure to pass in, filling in the lpProvider and lpRemoteName fields.. If dwScope is RESOURCE_REMEMBERED, RESOURCE_CONNECTED, or RESOURCE_RECENT this parameter may be NULL to enumerate all networks, or an lpProvider may be used to specify a particular network, with lpLocalName and lpRemoteName being ignored.
lphEnum
If function call is successful, this will contain a handle that can then be used for WNetEnumResource.
WN_NOT_SUPPORTED | this call is specifically returned when lpNetResource specifies a provider, dwScope is RESOURCE_GLOBALNET, and the specified provider does not support browsing. |
WN_NOT_CONTAINER | lpNetResource does not point to a container |
WN_BAD_VALUE | Invalid dwScope or dwUsage or dwType, or bad combination of parameters is specified. |
WN_FUNCTION_BUSY | The MPR or NP is busy (possibly initializing). The caller should retry. |
WN_NO_NETWORK | network is not present |
WN_EXTENDED_ERROR | a network specific error occurred. WNetGetLastError should be called to obtain a description of the error. |
WN_NOT_AUTHENTICATED | authentication needs to occur before the network resource can be enumerated. |
WN_NOT_LOGGED_ON | a system logon needs to occur before network enumeration is possible. |
WN_ACCESS_DENIED | the user is authenticated to the network where the enumeration is being attempted, but does not have sufficient permissions (access rights). |
If dwScope is set to RESOURCE_GLOBALNET and the lpNetResource parameter is NULL, each NETRESOURCE structure in the returned buffer will describe a network. Each entry's lpRemoteName field will be NULL (indicating the logical root of that network), and its lpProvider field will name the network. Passing such a NETRESOURCE to a further WNetOpenEnum will enumerate the top level of that particular network.
If dwScope is set to RESOURCE_CONTEXT, each NETRESOURCE structure in the returned buffer will describe a network resource that could be from any part of a network's global browse hierarchy. In addition, the first NETRESOURCE structure in the returned buffer represents a logical root for the network, and performing a WNetOpenEnum on this NETRESOURCE will enumerate the networks in the same way as above. Specifically, the NETRESOURCE structure has the following settings:
dwScope is RESOURCE_GLOBALNET | |
dwType is RESOURCETYPE_ANY | |
dwDisplayType is RESOURCEDISPLAYTYPE_ROOT | |
dwUsage is RESOURCEUSAGE_CONTAINER | |
lpLocalName, lpRemoteName, and lpProvider, are NULL | |
lpComment is set to a descriptive text for the root of the network |