15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Расшаривание ресурса в Windows 95/98/Me (пример использования функции NetShareAdd)

Windows 95/98/Me: Следующий пример демонстрирует, как дать в доступ ресурс на локальном компьютере при помощи функции NetShareAdd.

Пример заполняет структуру share_info_50 не задавая пароля на расшаренный ресурс. Пример так же распределяет и освобождает память, требуюмую для буфера.

#include <stdio.h>
#include <windows.h> 
#include <svrapi.h>

int main(int argc, char FAR * argv[])
{
   char FAR * pszServerName = NULL;
   short nLevel = 50;
   struct share_info_50* pBuf = NULL;
   unsigned short cbBuffer;
   NET_API_STATUS nStatus;
   //
   // Для локального компьютера ServerName должно быть NULL.
   //
   if ((argc < 3) || (argc > 4))
   {
      printf("Usage: %s [\\\\ServerName] ShareName SharePath\n", argv[0]);
      exit(1);
   }

   if (argc == 4)
      pszServerName = argv[1];
   //
   // Распределяем память для структуры share_info_50.
   //
   cbBuffer = sizeof(struct share_info_50);
   pBuf = malloc(cbBuffer);

   if (pBuf == NULL)
      printf("No memory\n");
   //
   // Заносим значения в структуру share_info_50.
   //
   strcpy(pBuf->shi50_netname, argv[argc-2]);
   pBuf->shi50_type = STYPE_DISKTREE;
   pBuf->shi50_flags = SHI50F_FULL;
   pBuf->shi50_remark = NULL;
   pBuf->shi50_path = argv[argc-1];
   pBuf->shi50_rw_password[0] = '\0'; // Без пароля
   pBuf->shi50_ro_password[0] = '\0'; // Без пароля
   //
   // Вызываем функцию NetShareAdd, указывая
   //  информационный уровень 50.
   //
   nStatus = NetShareAdd(pszServerName,
                         nLevel,
                         (char FAR *)pBuf,
                         cbBuffer);
   //
   // Отображаем результаты вызова функции.
   //
   if (nStatus == NERR_Success)
      printf("Share added successfully\n");
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);
   //
   // Освобождаем распределённую память.
   //
   if (pBuf != NULL)
      free(pBuf);

   return 0;
}