Для получения имени папки общего доступа я использовал следующий код, здесь я могу получить имена папок. Но проблема, с которой я сталкиваюсь, заключается в том, что папка общего доступа, созданная пользователем, также дает дополнительную папку, я не знаю, как запретить программе скрывать ненужные имена папок. Как в моем случае я получаю «cc_views»(используется для прозрачного) и «Пользователи» папки, которые я хочу удалить из списков папок.
Я написал следующие коды, пожалуйста, помогите в получении правильного вывода.
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <stdio.h>
#include <lm.h>
#pragma comment(lib, "Netapi32.lib")
#pragma comment(lib, "Advapi32.lib")
void wmain( int argc, TCHAR *lpszArgv[ ])
{
PSHARE_INFO_502 BufPtr,p;
NET_API_STATUS res;
LPTSTR lpszServer = NULL;
DWORD er=0,tr=0,resume=0, i;
switch(argc)
{
case 2:
lpszServer = lpszArgv[1];
break;
default:
printf("Usage: NetShareEnum <servername>\n");
//return;
}
//
// Print a report header.
//
printf("ShareFolderName\n");
printf("---------------\n");
//
// Call the NetShareEnum function; specify level 502.
//
do // begin do
{
res = NetShareEnum ((LPSTR)lpszServer, 502, (LPBYTE *) &BufPtr, MAX_PREFERRED_LENGTH, &er, &tr, &resume);
//
// If the call succeeds,
//
if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA)
{
p=BufPtr;
//
// Loop through the entries;
// print retrieved data.
//
for(i=1;i<=er;i++)
{
LPCTSTR str = (LPCTSTR)p->shi502_remark;
if(!(lstrcmpi(str,L"Remote admin")==0 ||lstrcmpi(str, L"Remote IPC")==0 || lstrcmpi(str,L"Default share")==0)) //Help in removing from extra folder based on the remarks
printf("%-20S%\n",p->shi502_netname);
p++;
}
//
// Free the allocated buffer.
//
NetApiBufferFree(BufPtr);
}
else
printf("Error: %ld\n",res);
}
// Continue to call NetShareEnum while
// there are more entries.
//
while (res==ERROR_MORE_DATA); // end do
return;
}
Просто продолжайте добавлять значения, которые вы хотите исключить из списка:
if(!(lstrcmpi(str,L"Remote admin")==0 ||
lstrcmpi(str, L"Remote IPC")==0 ||
lstrcmpi(str,L"Default share")==0 ||
lstrcmpi(str,L"cc_views")==0 ||
lstrcmpi(str,L"Users")==0))
printf("%-20S%\n",p->shi502_netname);
Других решений пока нет …