опубликован 11-09-2001 14:04 MSK
#include <windows.h>#include <stdio.h>
#include "Globals.h"
#include <iostream>
using namespace std;
void EnumerateNetworkResources(LPNETRESOURCE pNetResource)
{
DWORD dwResult = 0;
HANDLE hEnum = INVALID_HANDLE_VALUE;
DWORD dwScope = RESOURCE_GLOBALNET;// scope of enumeration
DWORD dwType = RESOURCETYPE_ANY;// resource types to list
DWORD dwUsage = RESOURCEUSAGE_ALL;// resource usage to list
LPNETRESOURCE lpNetResource = pNetResource;//&sNetResource;// resource structure
LPHANDLE lphEnum = &hEnum;// enumeration handle buffer
dwResult = WNetOpenEnum(dwScope, dwType, dwUsage, lpNetResource, lphEnum);
if (dwResult == NO_ERROR)
{
DWORD dwCount = -1;// entries to list
DWORD dwBufferSize = 1<<14;// 16K! buffer size
LPVOID lpBuffer = new unsigned char[dwBufferSize];// buffer
LPNETRESOURCE lpNetRes = NULL;
do {
memset(lpBuffer, 0, dwBufferSize);
dwResult = WNetEnumResource(hEnum, &dwCount, lpBuffer, &dwBufferSize);
if (dwResult == NO_ERROR)
{
for (unsigned int ui = 0; ui < dwCount; ui++)
{
lpNetRes = (LPNETRESOURCE)lpBuffer;
if (lpNetRes[ui].lpRemoteName)
cout << /*lpNetRes[ui].lpLocalName << "\t" << */lpNetRes[ui].lpRemoteName << endl;
if (lpNetRes[ui].dwUsage & RESOURCEUSAGE_CONTAINER)
{
EnumerateNetworkResources(&lpNetRes[ui]);
}
}
}
} while(dwResult != ERROR_NO_MORE_ITEMS);
if (lpBuffer)
delete [] lpBuffer;
dwResult = WNetCloseEnum(hEnum);
}
}
int main(int argc, char* argv[])
{
LPNETRESOURCE pNetResource = NULL;
EnumerateNetworkResources(pNetResource);
return 0;
}