文章作者:refdom
////////////////////////////////////////////////////////////////////////////////
//
// Enum NETResource
//
// File : EnumNETResource.cpp
//
// Create at : 2002.3.19
// Create by : refdom
// Email :
refdom@263.net
// Home Page :
www.opengram.com
//
// If you modify the code, or add more functions, please email me a copy.
//
////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <windows.h>
#include <winnetwk.h>
#pragma comment (lib, "Mpr.lib")
#define BUFFER_SIZE (16384)
void MyEnumResources(HANDLE, int);
int main (void)
{
HANDLE hEnum = NULL;
if (WNetOpenEnum (RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NULL, &hEnum) != NO_ERROR)
{
printf ("Error!\n");
return 0;
}
MyEnumResources (hEnum, 0);
WNetCloseEnum (hEnum);
return 0;
}
void MyEnumResources (HANDLE hEnum, int Layer)
{
DWORD dwSize = BUFFER_SIZE;
DWORD dwCount = -1;
const char* pDisplayType = NULL;
const char* pType = NULL;
int i, n, nLayer, nRetCode;
nLayer = Layer;
LPNETRESOURCE lpNET;
lpNET = (LPNETRESOURCE) malloc (dwSize);
if (lpNET == NULL)
{
puts ("Not enough memory\n");
return;
}
if (WNetEnumResource (hEnum, &dwCount, (LPVOID)lpNET, &dwSize) != NO_ERROR)
goto Exit0;
for (i = 0; i < (int) dwCount; i++)
{
switch (lpNET
.dwDisplayType)
{
case RESOURCEDISPLAYTYPE_DOMAIN:
pDisplayType = "DOMAIN: ";
break;
case RESOURCEDISPLAYTYPE_SERVER:
pDisplayType = "SERVER: ";
break;
case RESOURCEDISPLAYTYPE_SHARE:
pDisplayType = "SHARE: ";
switch (lpNET.dwType)
{
case RESOURCETYPE_DISK:
pType = "DISK: ";
break;
case RESOURCETYPE_PRINT:
pType = "PRINTER: ";
break;
default:
pType = "UNKNOWN: ";
break;
}
break;
case RESOURCEDISPLAYTYPE_GENERIC:
pDisplayType = "GENERIC: ";
break;
default:
pDisplayType = "UNKNOWN: ";
break;
}
for (n = 0 ; n < nLayer; n++)
{
printf ("\t");
}
if (lpNET.dwDisplayType == RESOURCEDISPLAYTYPE_SHARE)
printf ("%s %s %s\n", pDisplayType, pType, lpNET.lpRemoteName);
else
printf ("%s %s\n", pDisplayType, lpNET.lpRemoteName);
if (lpNET.dwUsage & RESOURCEUSAGE_CONTAINER)
{
HANDLE hCONTAINER;
nRetCode = WNetOpenEnum (RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, &lpNET, &hCONTAINER);
if ( nRetCode == NO_ERROR)
{
MyEnumResources (hCONTAINER, nLayer+1);
WNetCloseEnum (hCONTAINER);
}
else
{
for (n = 0 ; n <= nLayer; n++)
printf ("\t");
printf ("Error:");
if (nRetCode == ERROR_NO_NETWORK)
printf ("The network is unavailable.\n");
else if (nRetCode == 5)
printf ("Access Denial.\n");
else
printf ("%d\n", GetLastError());
}
}
}
Exit0:
free (lpNET);
return;
}