NETRESOURCE The NETRESOURCE structure is returned during enumeration of resources on the network and during enumeration of currently connected resources. typedef struct _NETRESOURCE { // nr DWORD dwScope; DWORD dwType; DWORD dwDisplayType; DWORD dwUsage; LPTSTR lpLocalName; LPTSTR lpRemoteName; LPTSTR lpComment; LPTSTR lpProvider; } NETRESOURCE;
Members dwScope Specifies the scope of the enumeration. Currently, this member can be one of the following values: Value Meaning RESOURCE_CONNECTED Currently connected resources (the dwUsage member is undefined). RESOURCE_GLOBALNET Resources on the network. RESOURCE_REMEMBERED Remembered (persistent) connections (dwUsage is undefined). dwType Specifies a bitmask that gives the resource type. Currently, this member can be one of the following values: Value Meaning RESOURCETYPE_ANY All resources RESOURCETYPE_DISK Disk resources RESOURCETYPE_PRINT Print resources dwDisplayType Specifies how the network object should be displayed in a network browsing user interface. Currently, this member can be the following values: Value Meaning RESOURCEDISPLAYTYPE_DOMAIN The object should be displayed as a domain. RESOURCEDISPLAYTYPE_GENERIC The method used to display the object does not matter. RESOURCEDISPLAYTYPE_SERVER The object should be displayed as a server. RESOURCEDISPLAYTYPE_SHARE The object should be displayed as a sharepoint. dwUsage Specifies a bitmask that gives the resource usage. This member is defined only if dwScope is RESOURCE_GLOBALNET. Currently, this member can be one of the following values: Value Meaning RESOURCEUSAGE_CONNECTABLE This is a connectable resource; the name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection. RESOURCEUSAGE_CONTAINER This is a container resource; the name pointed to by the lpRemoteName member can be passed to the WNetOpenEnum function to enumerate the resources in the container. lpLocalName Points to the name of a local device if the dwScope member is RESOURCE_CONNECTED or RESOURCE_REMEMBERED. This member is NULL if the connection does not use a device. Otherwise, it is undefined. lpRemoteName Points to a remote network name if the entry is a network resource. If the entry is a current or persistent connection, lpRemoteName points to the network name associated with the name pointed to by the lpLocalName member. lpComment Points to a provider-supplied comment. lpProvider Points to the name of the provider owning this resource. This member can be NULL if the provider name is unknown. QuickInfo Windows NT: Use version 3.1 or later. Windows: Use Windows 95 or later. Windows CE: Use version 2.0 or later. Header: Declared in winnetwk.h.See Also Windows Networking (WNet) Overview, Windows Networking Structures, WNetAddConnection, WNetCloseEnum, WNetEnumResource, WNetOpenEnum
The NETRESOURCE structure is returned during enumeration of resources on the network and during enumeration of currently connected resources. typedef struct _NETRESOURCE { // nr
DWORD dwScope;
DWORD dwType;
DWORD dwDisplayType;
DWORD dwUsage;
LPTSTR lpLocalName;
LPTSTR lpRemoteName;
LPTSTR lpComment;
LPTSTR lpProvider;
} NETRESOURCE;
Members
dwScope
Specifies the scope of the enumeration. Currently, this member can be one of the following values: Value Meaning
RESOURCE_CONNECTED Currently connected resources (the dwUsage member is undefined).
RESOURCE_GLOBALNET Resources on the network.
RESOURCE_REMEMBERED Remembered (persistent) connections (dwUsage is undefined).
dwType
Specifies a bitmask that gives the resource type. Currently, this member can be one of the following values: Value Meaning
RESOURCETYPE_ANY All resources
RESOURCETYPE_DISK Disk resources
RESOURCETYPE_PRINT Print resources
dwDisplayType
Specifies how the network object should be displayed in a network browsing user interface. Currently, this member can be the following values: Value Meaning
RESOURCEDISPLAYTYPE_DOMAIN
The object should be displayed as a domain.
RESOURCEDISPLAYTYPE_GENERIC
The method used to display the object does not matter.
RESOURCEDISPLAYTYPE_SERVER
The object should be displayed as a server.
RESOURCEDISPLAYTYPE_SHARE
The object should be displayed as a sharepoint.
dwUsage
Specifies a bitmask that gives the resource usage. This member is defined only if dwScope is RESOURCE_GLOBALNET. Currently, this member can be one of the following values: Value Meaning
RESOURCEUSAGE_CONNECTABLE This is a connectable resource; the name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection.
RESOURCEUSAGE_CONTAINER This is a container resource; the name pointed to by the lpRemoteName member can be passed to the WNetOpenEnum function to enumerate the resources in the container.
lpLocalName
Points to the name of a local device if the dwScope member is RESOURCE_CONNECTED or RESOURCE_REMEMBERED. This member is NULL if the connection does not use a device. Otherwise, it is undefined.
lpRemoteName
Points to a remote network name if the entry is a network resource.
If the entry is a current or persistent connection, lpRemoteName points to the network name associated with the name pointed to by the lpLocalName member. lpComment
Points to a provider-supplied comment.
lpProvider
Points to the name of the provider owning this resource. This member can be NULL if the provider name is unknown.
QuickInfo
Windows NT: Use version 3.1 or later.
Windows: Use Windows 95 or later.
Windows CE: Use version 2.0 or later.
Header: Declared in winnetwk.h.See Also
Windows Networking (WNet) Overview, Windows Networking Structures, WNetAddConnection, WNetCloseEnum, WNetEnumResource, WNetOpenEnum
HANDLE hEnum = 0;
DWORD dwScope = RESOURCE_GLOBALNET ;
if( dwFlags_p & CONNECTED )
dwScope = RESOURCE_CONNECTED ;
else if( dwFlags_p & REMEMBERED )
dwScope = RESOURCE_REMEMBERED ;
// else GLOBALNET ... DWORD dwType = RESOURCETYPE_ANY ;
if( dwFlags_p & TYPE_DISK )
dwType = RESOURCETYPE_DISK ;
else if( dwFlags_p & TYPE_PRINT )
dwType = RESOURCETYPE_PRINT ;
// else TYPE_ANY ... DWORD dwResult = WNetOpenEnum(
dwScope, // scope of enumeration
dwType, // resource types to list
0, // enumerate all resources
lpNetRC_p, // pointer to resource structure (NULL at first time)
&hEnum // handle to resource
) ; if( dwResult != NO_ERROR )
return NetError(dwResult, TEXT("WNetOpenEnum")); DWORD dwBuffer = 16384 ; // 16K is reasonable size
DWORD dwEntries = 0xFFFFFFFF ; // enumerate all possible entries
LPNETRESOURCE lpnrLocal = 0; BOOL bRet = TRUE; try {
do {
// first allocate buffer for NETRESOURCE structures ...
lpnrLocal = (LPNETRESOURCE) GlobalAlloc( GPTR, dwBuffer ) ; dwResult = WNetEnumResource(
hEnum, // resource-handle
&dwEntries,
lpnrLocal,
&dwBuffer
) ; if( dwResult == NO_ERROR ) {
for( register DWORD i = 0 ; i < dwEntries ; i++ ) {
if( ! OnHitResource( lpnrLocal[i] ) ) {
TRACE0("CNetwork::Enumerate(): OnHitResource() breaks enumeration\n");
throw CNetworkBreak(FALSE) ;
}
if( RESOURCEUSAGE_CONTAINER ==
(lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER) &&
lpnrLocal[i].dwDisplayType != RESOURCEDISPLAYTYPE_SERVER )
if( !Enumerate( &lpnrLocal[i], dwFlags_p ) ) {
TRACE0( "CNetwork::Enumerate(): recursiv call failed\n" );
throw CNetworkBreak(FALSE);
} }
} else if( dwResult != ERROR_NO_MORE_ITEMS ) {
throw CNetworkError(NetError(dwResult, TEXT("WNetEnumResource")));
}
} while( dwResult != ERROR_NO_MORE_ITEMS );
} catch( CNetworkError err ) {
bRet = err.m_bRet;
} if( lpnrLocal )
GlobalFree((HGLOBAL) lpnrLocal) ;
WNetCloseEnum(hEnum) ; return bRet;
}
这段程序当中,一直要等到if( RESOURCEUSAGE_CONTAINER ==
(lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER) &&
lpnrLocal[i].dwDisplayType != RESOURCEDISPLAYTYPE_SERVER ) 才开始列举网络,这是为什么呀?