NetShareEnum (..) winapi не может удалить ненужные папки

Для получения имени папки общего доступа я использовал следующий код, здесь я могу получить имена папок. Но проблема, с которой я сталкиваюсь, заключается в том, что папка общего доступа, созданная пользователем, также дает некоторую дополнительную папку, я не знаю, как запретить программе скрывать ненужные имена папок. Как и в моем случае, я получаю папки "cc_views"(используемые для clearcase) и "Users", которые я хочу удалить из списков папок.

Я написал следующие коды, Пожалуйста, помогите в получении правильного вывода.

 #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;
    }

1 ответ

Решение

Просто продолжайте добавлять значения, которые вы хотите исключить из списка:

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);
Другие вопросы по тегам