Extracting shared drive information from a local or remote server.
Environment: VC6 SP3, NT4 SP5
To extract shared drive information from a local or remote server (including shared and system shared drives), implement the following code into your sources.
int CNetworkAccess::EnumerateResource (LPSTR svrname)
{
PSHARE_INFO_502 BufPtr, p;
NET_API_STATUS res;
DWORD er = 0, tr = 0, resume = 0;
WCHAR serverName[36];
int ierror = 0;
// convert to a unicode string
if ((ierror = MultiByteToWideChar (CP_ACP,
MB_PRECOMPOSED,
svrname,
-1,
serverName,
36)) == 0)
{
AfxMessageBox ("BAD conversion -> bugging out ... !!!");
return STATUS_BAD;
}
do
{
// return shared drive information for the server selected
res = NetShareEnum ((TCHAR *)serverName,
502,
(LPBYTE *)&BufPtr,
0xFFFFFFFF,
&er,
&tr,
&resume);
// if OK
if (res == ERROR_SUCCESS || res == ERROR_MORE_DATA)
{
p = BufPtr;
for (int i = 1; i <= (int)er; i++)
{
// do something with the drive information
// increment pointer to next drive
p++;
}
// free system created memory
NetApiBufferFree (BufPtr);
}
} while (res == ERROR_MORE_DATA);
// return the status
return STATUS_OK;
}